문자열에서 특정 문자열이 포함되어 있는지 확인하는 작업은 빈번하게 발생합니다. 예를 들어 특정 문자열을 검색 후 문자열을 자르거나 특정 문자열이 포함되었는지에 따라 로직이 달라지는 경우입니다.
Java에서 특정 문자열이 포함되어 있는지 확인할 수 있는 몇 가지 방법이 존재합니다. String 클래스에서 지원하는 메서드, 정규식(Regex), Apache Commons에서 지원하는 StringUtils 클래스를 사용할 수 있습니다.
이번 포스팅에서는 Java에서 특정 문자열이 포함되어 있는지 확인하는 방법을 소개합니다.
String 클래스
Java에서 기본적으로 제공하는 String 클래스를 사용하여 특정 문자열이 포함되어 있는지 확인할 수 있습니다.
contains() 메서드
String에서 제공하는 contains() 메서드를 사용하여 특정 문자열이 존재하는지 확인할 수 있습니다. 특정 문자열을 인수로 전달하여 존재하면 true, 그렇지 않으면 false가 반환됩니다.
String str = "Java Programming";
System.out.println(str.contains("Java"));
System.out.println(str.contains("java"));
실행 결과
true
false
contains() 메서드는 대소문자를 구분합니다. 대소문자 구분을 하지 않기 위해서는 두 문자열의 대소문자를 일치시킵니다.
String str1 = "Java Programming";
String str2 = "JAVA PROGRAMMING";
String str3 = "JaVa ProGrAmMiNg";
System.out.println(str1.toLowerCase().contains(str2.toLowerCase()));
System.out.println(str1.toUpperCase().contains(str3.toUpperCase()));
실행 결과
true
true
indexOf() 메서드
indexOf() 메서드는 contains() 메서드에 비해 조잡하지만 특정 문자열 포함 여부를 확인할 수 있는 또 다른 방법입니다. 특정 문자열이 존재하면 해당 문자열의 첫 번째 인덱스가 반환되고 그렇지 않으면 -1이 반환됩니다.
String str = "Java Programming";
System.out.println(str.indexOf("Programming"));
System.out.println(str.indexOf("C#"));
실행 결과
5
-1
문자열 "Programming"은 5번째 인덱스에서 시작되므로 5가 반환됩니다. 문자열 "C#"은 존재하지 않으므로 -1이 반환됩니다.
특정 인덱스부터 문자열을 찾고 싶다면 두 번째 인수로 위치를 전달합니다.
String str = "Java Programming";
System.out.println(str.indexOf("Programming", 10));
실행 결과
-1
10번째 인덱스부터 문자열 "Programming"을 검색합니다. 문자열 "Programming"은 5번째 인덱스에 존재하므로 -1이 반환됩니다.
lastIndexOf() 메서드
indexOf() 메서드는 문자열의 시작 위치에서 특정 문자열을 검색하지만 lastIndexOf() 메서드는 문자열의 마지막 위치에서 특정 문자열을 검색합니다.
String str = "Java1 Java2 Java3";
System.out.println(str.indexOf("Java"));
System.out.println(str.lastIndexOf("Java"));
실행 결과
0
12
문자열을 시작 위치에서 찾고 싶은 경우 indexOf() 메서드를 사용하며 문자열을 마지막 위치에서 찾고 싶은 경우 lastIndexOf() 메서드를 사용합니다.
정규식(Regex)
정규식은 문자열에 특정 패턴 또는 규칙이 존재하는지 검증하기 위해 사용됩니다. Pattern 클래스는 패턴을 컴파일하여 작동합니다. 특정 문자열이 정규식 패턴에 일치한지 검증하기 위해 컴파일된 패턴을 Matcher 클래스의 객체에 할당합니다.
Matcher 클래스의 객체에서 find() 메서드를 호출하여 패턴이 일치한지 검증합니다. find() 메서드는 패턴이 일치하면 true, 그렇지 않으면 false를 반환합니다.
Pattern pattern = Pattern.compile(".*" + "Programming" + ".*");
Matcher matcher = pattern.matcher("Java Programming Hello!");
System.out.println(matcher.find());
실행 결과
true
StringUtils 클래스
Apache Commons에는 문자열을 조작할 수 있는 StringUtils 클래스가 존재합니다. StringUtils 클래스에서 제공하는 다양한 메서드로 특정 문자열이 포함되었는지 확인할 수 있습니다.
contains() 메서드
StringUtils 클래스의 contains() 메서드는 String 클래스의 contains() 메서드와 동일하게 작동합니다.
String str = "Java Programming";
System.out.println(StringUtils.contains(str, "Java"));
System.out.println(StringUtils.contains(str, "C#"));
실행 결과
true
false
containsIgnoreCase() 메서드
StringUtils 클래스의 contains() 메서드에서 대소문자를 무시하고 싶은 경우 containsIgnoreCase() 메서드를 사용합니다.
String str1 = "Java Programming";
String str2 = "JAVA proGRAmming";
System.out.println(StringUtils.containsIgnoreCase(str1, str2));
실행 결과
true
indexOf() 메서드
마찬가지로, indexOf() 메서드도 String 클래스의 indexOf() 메서드와 동일하게 작동합니다.
String str = "Java Programming";
System.out.println(StringUtils.indexOf(str, "Programming"));
System.out.println(StringUtils.indexOf(str, "C#"));
실행 결과
5
-1
indexOfAny() 메서드
단일 문자열이 아닌 여러 문자열이 포함되었는지 확인하고 싶은 경우 indexOfAny() 메서드를 사용합니다. 여러 문자열이 포함된 경우 시작 위치와 가장 가까운 인덱스가 반환됩니다. 포함된 문자열이 없는 경우 -1이 반환됩니다.
String str = "Java Programming";
System.out.println(StringUtils.indexOfAny(str, new String[] {"Programming", "C#"}));
System.out.println(StringUtils.indexOfAny(str, new String[] {"JavaScript", "C#"}));
실행 결과
5
-1
indexOfDifference() 메서드
indexOfDifference() 메서드는 두 문자열을 비교하여 다른 위치(인덱스)를 반환합니다. 두 문자열이 동일하면 -1이 반환됩니다.
String str1 = "Java Programming";
String str2 = "Java Programming";
String str3 = "JavaScript Programming";
System.out.println(StringUtils.indexOfDifference(str1, str2));
System.out.println(StringUtils.indexOfDifference(str2, str3));
실행 결과
-1
4
lastIndexOf() 메서드
lastIndexOf() 메서드는 String 클래스의 lastIndexOf() 메서드와 동일하게 작동합니다.
String str = "Java1 Java2 Java3";
System.out.println(StringUtils.indexOf(str, "Java"));
System.out.println(StringUtils.lastIndexOf(str, "Java"));
실행 결과
0
12
'Java > 문자열' 카테고리의 다른 글
[Java]문자열을 정수로 변환(String to Int) (0) | 2022.04.09 |
---|---|
[Java]문자열을 날짜로 변환하는 방법 (0) | 2022.04.09 |
[Java]특정 문자열로 시작하는지 확인하는 방법 (0) | 2022.04.08 |
[Java]문자열 비교하는 방법 (0) | 2022.04.06 |
[Java]문자열(String) null 체크 (0) | 2022.04.06 |
댓글