알고리즘
[문자열] 문자 찾기 & 대소문자 변환 & 문장 속 단어찾기(indexOf(), substring())
날아
2023. 3. 22. 13:23
Q. 해당 특정문자가 입력받은 문자열에 몇 개 존재하는지 알아내시오.
대소문자를 구분하지 않는다.
Class Main {
public int solution(String str, char t){
int answer = 0;
str = str.toUpperCase(); // 대소문자를 구분하지 않음. 모두 대문자가 된다.
t = Character.toUpperCase(t); //대문자가 된다.
/*for(int i=0; i<str.length(); i++){
if(str.charAt(i)==t)
answer++;
}*/
/*향상된 for문 ver.*/
for(char x : str.toCharArray()) { //문자배열객체를 생성
if(x==t) answer++;
}
return answer;
}
public static void main(String[] args){
Main T = new Main(); //인스턴스 메서드라 객체 생성
Scanner kb = new Scanner(System.in);
String str = kb.next(); //next는 콘솔창에서 문자열을 하나 읽어들임
char t = kb.next().charAt(0); //문자 한개를 읽어들임
System.out.print(T.solution(str, t));
}
}
- 대소문자를 구분하지 않기때문에 모두 대문자화 하였다. String.toUpperCase() / Character.toUpperCase()
- 향상된 for문에는 String이 올 수 없다. 배열이나 Array, ArrayList가 올 수 있다. 따라서 문자열을 기준으로 문자배열객체를 생성해주는 메서드를 사용하였다. String.toCharArray()
Q. 대문자는 소문자로, 소문자는 대문자로 바꾸어라
Class Main {
public int solution(String str){
String answer = "";
for(char x : str.toCharArray()){
/* if(Character.isLowerCase(x)){
answer += Character.toUpperCase(x);
} else {
answer += Character.toLowerCase(x);
}*/
/*아스키 넘버로도 구현 가능
대문자는 65~90
소문자는 97~122
대소문자 변환은 소문자에서 32를 빼면 대문자가 된다.*/
if(97<=x && x<=122){
answer += (char)(x-32); //형변환 필수!
} else {
answer += (char)(x+32);
}
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.next();
System.out.print(T.solution(str));
}
}
- 문자열 x가 소문자일때와 대문자일때를 나누어서 각각 반대 문자로 바꿔주는 메서드를 사용하였다. Character.toUpperCase() / Character.toLoswerCase()
- 아스키 문자로도 구현할 수 있다. 대문자는 65~90 소문자는 97~122 대문자와 소문자의 차이는 32이다.
Q. 한 개의 문장 속에서 가장 긴 단어를 출력하시오.
단, 가장 길이가 긴 단어가 여러개일 경우 문장 속에서 가장 앞쪽에 위치한 단어를 답으로 한다.
Class Main {
public int solution(String str){
String answer = "";
int max = Integer.MIN_VALUE; //Integer의 가장 작은 값으로 초기화
/*String[] s = str.split(" "); //띄어쓰기를 기준으로 단어를 자른다.
for(String x : s) {
int len = x.length();
if(len > max) {
m = len;
answer = x;
}*/
/*indexOf(), substring() 사용 */
int pos;
while(((pos = str.indexOf(' ')) != -1) { //indexOf()가 ' ' 를 발견하지 못하면 -1를 반환한다.
//발견할 경우 index위치를 반환한다. 첫번째 pos는 index(2)를 가리킨다.
String tmp = str.substring(0, pos);
int len = tmp.length();
if(len > max) {
max = len;
answer = tmp;
}
str = str.substring(pos+1);
}
if(str.length() > m) {
answer = str;
}
return answer;
}
public static void main(String[] args){
Main T = new Main();
Scanner kb = new Scanner(System.in);
String str = kb.nextLine(); //문장을 입력받아야할 때는 nextLine()으로 받는다.
System.out.print(T.solution(str));
}
}
- int max = Integer.MIN_VALUE;
- indexOf() : 특정 문자열의 위치를 알려주는 메서드
- substring() : 특정 문자열의 위치를 기준으로 문자열을 자른다.
- str = str.substring(pos+1); : 다음 문자열로 옮겨주기 위해서
- if(str.length() > m) { answer = str;} : 마지막 str은 그 뒤에 빈칸이 없기 때문에 indexOf가 -1를 반환해서 카운트되지 않는다. 따라서 마지막 단어는 따로 구해줘야한다.