어제 오늘 내일

[Java] 문자열에 특정 문자 포함 여부 확인하기 - contains, indexOf, matches 본문

IT/Java

[Java] 문자열에 특정 문자 포함 여부 확인하기 - contains, indexOf, matches

hi.anna 2021. 4. 28. 10:06

 

문자열에 특정 문자가 포함되어 있는지 확인 하기 위해서

다음의 3가지 메소드를 사용할 수 있습니다.

  1. contains() / java.lang.String
  2. indexOf() / java.lang.String
  3. matches() / java.lang.String

 

1. contains()

public boolean contains(CharSequence s)

파라미터로 입력받은 CharSequence s 를 문자열이 포함하고 있는지 여부를 리턴합니다.

(대소문자를 구분합니다.)

 

  코드  

public class StringContainsString {
    public static void main(String[] args) {
        
        String str = "hello Java!";

        System.out.println(str.contains("he"));   // true
        System.out.println(str.contains("Java")); // true
        System.out.println(str.contains("java")); // false
        System.out.println(str.contains(" ")); // true
        
    }
}

  결과  

true
true
false
true

str.contains("he");

str이 파라미터로 입력받은 문자열을 가지고 있을 경우, true를 리턴하고,

그렇지 않은 경우 false를 리턴합니다.

 

str.contains("java");

원본 문자열 str은 "Java"라는 문자열은 가지고 있지만,

소문자로 시작하는 "java"라는 문자열은 가지고 있지 않습니다.

contains() 메소드는 대소문자를 구분하기 때문에,

위 구문의 결과는 false입니다.

 

 

 

2. indexOf()

public int indexOf(int ch)
public int indexOf(int ch, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)

indexOf() 메소드는

파라미터로 입력받은 문자나 문자열이

원본 문자열에서 처음 나타나는 index를 찾아서 index 위치를 리턴합니다.

만약, 원본 문자열에 찾는 문자나 문자열이 없으면 0을 리턴합니다.

 

이런, 특징을 이용해서, 원본 문자열이 파라미터로 입력받은 문자열을 가지고 있는지 체크할 수 있습니다.

 

 

  코드  

public class StringContainsString {
    public static void main(String[] args) {

        String str = "hello Java!";

        // indexOf(String str)
        System.out.println(str.indexOf("he")); // 0
        System.out.println(str.indexOf("Java")); // 6
        System.out.println(str.indexOf("java")); // -1
        System.out.println(str.indexOf(" ")); // 5
        
        // indexOf(int ch)
        System.out.println(str.indexOf('l')); // 2

        // indexOf(int ch, int fromIndex)
        System.out.println(str.indexOf('l', 3)); // 3
        System.out.println(str.indexOf('l', 4)); // -1
        
    }
}

  결과  

0
6
-1
5
2
3
-1

indexOf() 메소드의 기본적인 사용법을 보여주는 예제입니다.

indexOf() 메소드는 입력받은 파라미터(문자, 또는 문자열)가 원본 문자열에서 가장 먼저 나오는 index를 리턴합니다.

 

str.indexOf("he");

"he"가 나오는 첫번째 index는 0입니다.

 

str.indexOf("Java");

"Java"가 나오는 첫번째 index는 6입니다.

 

str.indexOf("java");

indexOf() 메소드는 대소문자를 구분하기 때문에

"java"는 원본 문자열에 없습니다.

따라서, -1을 리턴하였습니다.

 

str.indexOf(" ");

빈 공백이 처음 오는 index는 5입니다.

 

str.indexOf('l');

파라미터로 char 문자를 받을 수도 있습니다.

원본 문자열에서 알파벳 'l'은 2번 나옵니다.

indexOf() 메소드는 이 중 첫번째로 나오는 'l'의 index를 리턴합니다.

 

str.indexOf('l', 3);

이렇게 두번째 파라미터를 입력하면,

두번째 파라미터는 start index를 나타냅니다.

indexOf() 는 원본 문자열의 start index부터, 파라미터로 입력받은 문자열을 찾습니다.

위 예제는 index 3부터 'l'을 찾았기 때문에,

index 2의 'l'은 무시되고, index 3의 'l'의 위치를 리턴하였습니다.

 

str.indexOf('l', 4);

index 4부터는 더 이상 'l'이 없기 때문에 -1을 리턴하였습니다.

 

 

  코드  

public class StringContainsString {
    public static void main(String[] args) {
        
        String str = "hello Java!";

        System.out.println(str.indexOf("he") >= 0);   // true
        System.out.println(str.indexOf("Java") >= 0); // true
        System.out.println(str.indexOf("java") >= 0); // false
        System.out.println(str.indexOf(" ") >= 0); // true
        
    }
}

  결과  

true
true
false
true

찾는 문자열이 없으면 -1(음수)를 리턴하는 indexOf()의 특성을 이용하여

문자열이 특정 문자열을 가지고 있는지 체크하는 코드입니다.

indexOf()의 리턴값이 0보다 작을 경우, 찾는 문자열을 포함하고 있지 않습니다.

 

 

 

matches()

public boolean matches(String regex)

정규식을 이용하여, 문자열에 정규식과 일치하는 부분이 있는지 체크하는 메소드입니다.

앞에서 소개한 contains(), indexOf()와 달리 파라미터로 정규식을 입력받는 다는 점에 주의하세요.

 

  코드  

public class StringContainsString {
    public static void main(String[] args) {

        String str = "hello Java!";

        System.out.println(str.matches("he")); // false
        System.out.println(str.matches("(.*)he(.*)")); // true
    }
}

  결과  

false
true

str.matches("he");

파라미터로 "he"를 입력하였더니, 결과가 false입니다.

이 경우 문자열이 정확히 "he"여야만, 결과가 true가 됩니다.

 

str.matches("(.*)he(.*)");

원래 우리의 의도대로, 문자열에 "he"가 포함되는지 체크하기 위해서

위와 같이 정규식을 파라미터로 넘겨주었습니다.

(.*)는 0번 이상의 문자가 나오는 경우를 나타내는 정규식입니다.

즉, "(.*)he(.*)" 정규식은 문장의 어느 곳에든 "he"라는 문자열이 나올 경우 true를 리턴합니다.

 

matches() 메소드는 파라미터로 정규식을 사용해야 해서 조금 어렵게 느껴질수 있습니다.

하지만, 복잡한 조건을 주어서 패턴을 찾아야 할때는 매우 유용하게 사용될 수 있습니다.

 


 

문자열에 특정 문자나 문자열이 포함되어 있는지 확인하는 방법을 알아보았습니다.

일반적으로 간단한 문자나 문자열의 체크는 contains()를 많이 사용하고,

좀더 복잡한 패턴을 체크해야 할때는 matches()를 사용할 수 있습니다.

 

 

반응형
Comments