문제
영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.
입력
첫 줄에 영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열의 길이는 1,000,000을 넘지 않는다. 단어는 공백 한 개로 구분되며, 공백이 연속해서 나오는 경우는 없다. 또한 문자열은 공백으로 시작하거나 끝날 수 있다.
출력
첫째 줄에 단어의 개수를 출력한다.
예제
```java 입력: The Curious Case of Benjamin Button 출력: 6
처음 설계
- BR을 사용해 문자 입력을 받는다
- split를 사용해 공백을 기준으로 str을 자른다
- count에 str의 길이를 담는다
- count을 출력한다
문제점
split를 사용하면 문자열의 처음과 마지막에 공백이 있다면 그것 또한 문자열에 포함시킨다. 그래서 StringTokenizer를 사용하여 자르는 방법을 바꿨다.
StringTokenizer를 사용하는 방법
공백을 기준으로 지정하면 나누어진 문자열을 토큰에 저장해준다. 문자열의 처음과 마지막에 예외처리를 해줄 필요가 없다.
구현
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine();
br.close();
StringTokenizer st = new StringTokenizer(str," ");
int count = st.countTokens();
System.out.print(count);
}
}
PREVIOUS자바 스프링 핵심개념 (DI)