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. 고급: Pattern
과 Matcher
를 사용한 단어 수 세기
정규 표현식을 사용해 보다 복잡한 문자열에서 단어를 구분할 수 있습니다. 자바의 **Pattern
**과 Matcher
클래스를
사용하여 패턴 매칭 기반으로 단어를 찾을 수 있습니다.
5.1 Pattern
과 Matcher
를 사용한 단어 수 세기
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
: 문자열을 특정 구분자를 기준으로 나눠 토큰 개수를 셀 수 있습니다.Pattern
과Matcher
: 정규 표현식을 사용하여 더욱 세밀하게 단어를 구분하고, 단어 개수를 셀 수 있습니다.
각 방법은 특정 상황에 맞게 사용할 수 있으며, 자바에서 문자열을 처리하고 단어를 세는 데 유용합니다.