문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().trim();
String[] arr = str.split(" ");
System.out.println(arr.length);
}
}
풀이과정
- trim() 활용하여 앞뒤 공백 없애기
- split() 활용하여 공백 기준 문자열 자르기
문제점
- 문자열이 아예 공백일 경우 인식을 못 함
정답 코드
Split 사용하기
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine().trim();
if (str.isEmpty()) {
System.out.println(0);
} else {
String[] arr = str.split(" ");
System.out.println(arr.length);
}
}
}
변경된 점
- 문자열이 공백일 경우 조건 처리
StringTokenizer 사용하기
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
StringTokenizer st = new StringTokenizer(str," ");
System.out.println(st.countTokens());
}
}
- StringTokenizer 클래스: 특정 문자에 따라 문자열을 나눔
boolean | hasMorkTokens() | 남아있는 토큰이 있으면 true, 없으면 false |
String | nextToken() | 객체에서 다음 토큰(문자열) 반환 |
String | nextToken(String delim) | delim 기준으로 다음 토큰 반환 |
boolean | hasMoreElements() | hasMorkTokens() 와 동일 |
Object | nextElement() | nextToken()과 동일하지만 객체 반환 |
int | countTokens() | 총 토큰 갯수 리턴 |
Split vs. StringTokenizer
- Split
- String 클래스에 속해있는 메소드
- 문자/문자열로 문자열 구분
- 빈 문자열을 토큰으로 인식
- 결과값: 문자열 배열
- StringTokenizer
- java.util에 포함되어 있는 클래스
- 정규표현식으로 문자열 구분
- 빈 문자열을 토큰으로 인식 x
- 결과값: 문자열
'Coding test > java' 카테고리의 다른 글
[백준][java] 1157번: 단어 공부 (0) | 2025.04.02 |
---|