[JAVA] String 클래스의 indexOf, contains, matches 메서드 비교

jay_hyeok·2024년 1월 18일

JAVA

목록 보기
1/2
post-thumbnail

String 클래스에서 특정 문자가 포함되어 있는지 확인할 때 3가지 메서드를 사용할 수 있다.

1. indexOf( )

  • 파라미터로 입력받은 문자나 문자열이 원본 문자열에서 처음 나타나는 index를 찾아서 index 위치를 반환
  • 대/소문자를 구분하고, 공백 역시 구분
  • 원본 문자열에 찾는 문자나 문자열이 없으면 -1을 반환
int indexOf(String str)
int indexOf(String str, int fromIndex)
int indexOf(int ch)
int indexOf(int ch, int fromIndex)

예시

public class StringIndexOf {
  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, 'l'을 int형으로 받는 이유는 아스키코드
    
    // indexOf(int ch, int fromIndex)
    /* 두번째 파라미터는 start index이므로 index 3부터 문자열을 찾는다. */
    System.out.println(str.indexOf('l', 3)); //3
    System.out.println(str.indexOf('l', 4)); //-1
  }
}

2. contains( )

  • 대상 문자열에 특정 문자열 또는 파라미터로 넘겨받은 문자열이 포함되어 있는지 확인하는 메서드
  • 입력받은 문자열이 포함되어 있으면 true, 없으면 false를 반환
  • 대/소문자를 구분하고, 공백 역시 구분
boolean contains(CharSequence s)

예시

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

  String str = "my java test"; 
  
  System.out.println(str.contains("java")); //true
  System.out.println(str.contains(" my")); //false, 공백 구분 
  System.out.println(str.contains("JAVA")); //false, 대/소문자 구분 
  System.out.println(str.contains("java test")); //true 
  System.out.println(str.contains(" ")); //true 
  } 
}

  • 사실 contains 메서드는 아래와 같이 내부에서 indexOf 메서드를 호출해서 true/false를 반환하기 때문에 동작 원리는 동일하다.
  • 특정 문자열이 들어가 있는지만 확인하는 경우엔 contains 메서드를 사용하여 코드 가독성을 높이고, 위치까지 확인하는 경우엔 indexOf 메서드를 사용하면 효율적인 코딩을 할 수 있을 것 같다.

3. matches( )

  • 정규표현식을 이용하여 문자열에 정규식과 일치하는 부분이 있는지 확인하는 메서드
  • 특정 문자열을 검색하기 보다는 한글, 숫자 등과 같은 형태의 텍스트가 존재하는지 확인할 때 사용
  • 찾는 문자열이 있으면 true, 없으면 false를 반환
boolean matches(String regex)

예시

public class StringMatches {
  public static void main(String[] args) {
  
    String str = "hello Java!";
    
    System.out.println(str.matches("he")); //false
    /*문자열이 정확히 "he" 이여야만 true를 반환*/
    
    System.out.println(str.matches("(.*)he(.*)")); //true
    /*(.*)는 0번 이상의 문자가 나오는 경우를 나타내는 정규식이며,
    "(.*)he(.*)" 정규식은 문장의 어느 곳에서든 "he"라는 문자열이 나올 경우 true를 반환*/
  }
}

0개의 댓글