Java로 개발하다 보면 문자열 안에 특정 단어가 포함되어 있는지 확인해야 하는 경우가 자주 있습니다. 이 글에서는 가장 널리 사용되는 세 가지 방법, contains(), indexOf(), StringTokenizer를 예제 코드와 함께 정리했습니다.
1. contains() 메서드
String 클래스의 contains() 메서드는 문자 시퀀스를 매개변수로 받아 해당 값이 현재 문자열에 존재하는지 확인합니다. 단어를 찾으면 true, 찾지 못하면 false를 반환하므로 단순 포함 여부만 확인할 때 가장 간결한 방법입니다.
예제
public class ParsingForSpecificWord {
public static void main(String args[]) {
String str1 = "Hello how are you, welcome to Tutorialspoint";
String str2 = "Tutorialspoint";
if (str1.contains(str2)) {
System.out.println("검색 성공");
} else {
System.out.println("검색 실패");
}
}
}
실행 결과
검색 성공
2. indexOf() 메서드
String 클래스의 indexOf() 메서드는 찾고자 하는 문자열을 매개변수로 받아 현재 문자열에서 해당 문자열이 시작되는 인덱스를 반환합니다. 찾지 못하면 -1을 반환하며, 단순 포함 여부뿐 아니라 단어의 위치까지 확인할 수 있다는 점이 장점입니다.
단, 반환값은 0이 될 수도 있으므로 조건문을 반드시 index != -1로 작성해야 합니다. index > 0으로 비교하면 문장 맨 앞에 위치한 단어를 놓칠 수 있습니다.
예제
public class ParsingForSpecificWord {
public static void main(String args[]) {
String str1 = "Hello how are you, welcome to Tutorialspoint";
String str2 = "Tutorialspoint";
int index = str1.indexOf(str2);
if (index != -1) {
System.out.println("검색 성공");
System.out.println("단어의 위치(인덱스): " + index);
} else {
System.out.println("검색 실패");
}
}
}
실행 결과
검색 성공
단어의 위치(인덱스): 26
3. StringTokenizer 클래스
StringTokenizer 클래스를 사용하면 지정한 구분자를 기준으로 문자열을 여러 개의 토큰으로 분리한 뒤 하나씩 순회하며 처리할 수 있습니다. 아래 예제는 원본 문자열을 공백 기준으로 단어별로 나누고, equals() 메서드로 각 단어가 찾고자 하는 단어와 정확히 일치하는지 비교합니다.
예제
import java.util.StringTokenizer;
public class ParsingForSpecificWord {
public static void main(String args[]) {
String str1 = "Hello how are you welcome to Tutorialspoint";
String str2 = "Tutorialspoint";
// StringTokenizer 객체 생성 (공백을 구분자로 사용)
StringTokenizer tokenizer = new StringTokenizer(str1, " ");
boolean found = false;
while (tokenizer.hasMoreTokens()) {
String token = tokenizer.nextToken();
if (token.equals(str2)) {
found = true;
break;
}
}
if (found) {
System.out.println("검색 성공");
} else {
System.out.println("검색 실패");
}
}
}
실행 결과
검색 성공
어떤 방법을 선택해야 할까?
- contains() : 단어 포함 여부만 빠르게 확인하면 될 때 가장 간단합니다.
- indexOf() : 단어가 문자열의 어느 위치에 있는지까지 알아야 할 때 유용합니다.
- StringTokenizer : 문자열을 단어 단위로 분리해 정확히 일치하는 단어를 찾거나 각 토큰을 추가로 가공해야 할 때 적합합니다.
참고로 최근 Java 코드에서는 StringTokenizer보다 String.split() 메서드나 정규식 기반의 Pattern 클래스를 사용하는 것이 권장됩니다. 또한 대소문자 구분 없이 검색하려면 비교 전에 toLowerCase()로 두 문자열을 변환한 뒤 비교하면 됩니다.