[백준][java] 1152번: 단어의 개수

문제

영어 대소문자와 공백으로 이루어진 문자열이 주어진다. 이 문자열에는 몇 개의 단어가 있을까? 이를 구하는 프로그램을 작성하시오. 단, 한 단어가 여러 번 등장하면 등장한 횟수만큼 모두 세어야 한다.


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
    • 결과값: 문자열

 


split 사용
StringTokenizer 사용

 

'Coding test > java' 카테고리의 다른 글

[백준][java] 1157번: 단어 공부  (0) 2025.04.02