코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java_Count Words

자바에서 단어 수 세기 (Java Count Words)

자바에서 문자열 내의 단어 개수를 세는 작업은 매우 자주 사용하는 기능입니다. 이를 위해 다양한 방법을 사용할 수 있으며, 주로 문자열의 공백이나 특정 구분자를 기준으로 단어를 나누고, 나눈 단어의 개수를 세면 됩니다. 여기서는 몇 가지 자주 사용하는 방법을 다루겠습니다.

1. 간단한 공백을 기준으로 단어 수 세기

자바에서 문자열을 공백 기준으로 분리하여 단어 수를 세는 가장 간단한 방법은 split() 메서드를 사용하는 것입니다.

1.1 split() 메서드를 사용한 단어 수 세기

public class Main {
    public static void main(String[] args) {
        String text = "Hello, welcome to the world of Java.";

        // 공백을 기준으로 문자열 분리
        String[] words = text.split("\\\\\\\\s+");

        // 배열의 길이로 단어 개수를 확인
        System.out.println("단어 수: " + words.length);
    }
}

설명:

  • split("\\\\\\\\s+"): 정규 표현식을 사용하여 하나 이상의 공백을 기준으로 문자열을 분리합니다. \\\\\\\\s+는 공백 문자(스페이스, 탭 등)가 하나 이상인 곳에서 문자열을 나눕니다.
  • 분리된 단어들은 배열에 저장되고, 배열의 길이가 단어의 개수가 됩니다.

출력:

단어 수: 7

2. 특수문자와 공백을 함께 고려한 단어 수 세기

단어를 나누는 기준이 공백뿐만 아니라, 쉼표, 마침표, 느낌표 등 특수문자도 포함될 수 있습니다. 이를 위해 특수문자와 공백을 모두 처리하는 정규 표현식을 사용할 수 있습니다.

2.1 특수문자 제거 후 단어 수 세기

public class Main {
    public static void main(String[] args) {
        String text = "Hello, world! Welcome to Java.";

        // 정규 표현식을 사용해 특수문자를 제거하고, 공백 기준으로 단어 분리
        String[] words = text.split("[^a-zA-Z]+");

        // 배열의 길이로 단어 개수를 확인
        System.out.println("단어 수: " + words.length);
    }
}

설명:

  • [^a-zA-Z]+: 알파벳이 아닌 모든 문자를 구분자로 사용하여 문자열을 분리합니다. 즉, 알파벳 이외의 모든 특수문자, 숫자, 공백 등을 기준으로 단어를 나눕니다.
  • 이 방법은 영어 알파벳 기준으로 단어를 구분하며, 숫자나 특수문자는 제외합니다.

출력:

단어 수: 5

3. Scanner 클래스를 사용한 단어 수 세기

Scanner 클래스는 파일이나 문자열에서 토큰 단위로 데이터를 읽는 데 유용합니다. 이 방법을 사용하면 단어를 하나씩 읽어가면서 그 개수를 셀 수 있습니다.

3.1 Scanner를 사용한 단어 수 세기

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        String text = "Hello, welcome to the world of Java.";

        // Scanner 객체 생성 (문자열을 입력으로 받음)
        Scanner scanner = new Scanner(text);

        // Scanner의 기본 구분자는 공백
        int wordCount = 0;
        while (scanner.hasNext()) {
            scanner.next();  // 단어 하나씩 읽음
            wordCount++;
        }

        // Scanner 객체 닫기
        scanner.close();

        System.out.println("단어 수: " + wordCount);
    }
}

설명:

  • hasNext(): 더 읽을 단어가 있는지 확인하는 메서드입니다.
  • next(): 문자열에서 단어 하나씩 읽어옵니다.
  • 이 방법은 매우 간단하며, 기본적으로 공백을 기준으로 단어를 구분합니다.

출력:

단어 수: 7

4. StringTokenizer를 사용한 단어 수 세기

StringTokenizer 클래스는 문자열을 토큰으로 나누는 방법을 제공합니다. 기본적으로 공백을 구분자로 사용하지만, 다른 구분자를 지정할 수도 있습니다.

4.1 StringTokenizer를 사용한 단어 수 세기

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        String text = "Hello, welcome to the world of Java.";

        // StringTokenizer 객체 생성
        StringTokenizer tokenizer = new StringTokenizer(text);

        // 토큰의 개수 = 단어의 개수
        int wordCount = tokenizer.countTokens();

        System.out.println("단어 수: " + wordCount);
    }
}

설명:

  • *StringTokenizer*는 기본적으로 공백을 구분자로 사용하여 문자열을 토큰 단위로 나눕니다.
  • *countTokens()*는 구분된 토큰의 개수를 반환합니다.

출력:

단어 수: 7

4.2 다른 구분자를 사용하는 StringTokenizer

특정 구분자를 직접 지정하여 단어를 나누고 싶다면, 두 번째 인자로 구분자를 전달할 수 있습니다.

import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) {
        String text = "Hello, welcome to the world of Java.";

        // 쉼표, 공백, 마침표 등을 구분자로 설정
        StringTokenizer tokenizer = new StringTokenizer(text, " ,.");

        // 토큰의 개수 = 단어의 개수
        int wordCount = tokenizer.countTokens();

        System.out.println("단어 수: " + wordCount);
    }
}

설명:

  • " ,.": 쉼표, 공백, 마침표를 구분자로 사용하여 단어를 나눕니다.
  • *StringTokenizer*는 여러 구분자를 동시에 사용할 수 있습니다.

출력:

단어 수: 6

5. 고급: PatternMatcher를 사용한 단어 수 세기

정규 표현식을 사용해 보다 복잡한 문자열에서 단어를 구분할 수 있습니다. 자바의 **Pattern**과 Matcher 클래스를 사용하여 패턴 매칭 기반으로 단어를 찾을 수 있습니다.

5.1 PatternMatcher를 사용한 단어 수 세기

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {
    public static void main(String[] args) {
        String text = "Hello, welcome to the world of Java.";

        // 단어를 찾는 정규 표현식 패턴
        Pattern pattern = Pattern.compile("\\\\\\\\b\\\\\\\\w+\\\\\\\\b");
        Matcher matcher = pattern.matcher(text);

        int wordCount = 0;

        // 매칭된 단어가 있을 때마다 카운트 증가
        while (matcher.find()) {
            wordCount++;
        }

        System.out.println("단어 수: " + wordCount);
    }
}

설명:

  • \\\\\\\\b\\\\\\\\w+\\\\\\\\b: 단어 경계를 기준으로 한 개 이상의 문자(단어)를 찾는 정규 표현식입니다.
  • *matcher.find()*는 일치하는 패턴을 찾을 때마다 true를 반환하고, 단어의 개수를 셀 수 있습니다.

출력:

단어 수: 7

요약

  • split(): 문자열을 공백 또는 정규 표현식을 기준으로 나눠 배열로 반환하며, 배열의 길이로 단어 개수를 알 수 있습니다.
  • Scanner: 입력된 문자열을 공백을 기준으로 토큰 단위로 나눠 단어를 셀 수 있습니다.
  • StringTokenizer: 문자열을 특정 구분자를 기준으로 나눠 토큰 개수를 셀 수 있습니다.
  • PatternMatcher: 정규 표현식을 사용하여 더욱 세밀하게 단어를 구분하고, 단어 개수를 셀 수 있습니다.

각 방법은 특정 상황에 맞게 사용할 수 있으며, 자바에서 문자열을 처리하고 단어를 세는 데 유용합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com