[자바/JAVA] indexOf() 특정 문자열 찾는법

indexOf() 메서드는 JDK에 이미 존재하는 java.lang 패키지에 있는 Class String에 구현돼 있다. 별도 조치 없이 사용하면 된다.

indexOf()

indexOf()는 특정 문자 또는 문자열이 앞에서부터 처음 발견되는 인덱스를 반환한다. Hello에서 e라는 문자가 몇번째에 있나요? 같은 질문에 답하는 것이다. 만약 찾지 못하면 -1을 반환한다.

쓰임새는 매개변수 타입에 따라 4가지로 나뉜다.

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

JDK 11 API 문서에 설명된 indexOf() 메서드 기능

JDK API 문서를 확인하면 자세한 정보를 볼 수 있다.

활용법은 크게 복잡하지 않다. 상황에 따라 맞는 형태로 사용하면 된다.

indexOf(String str)

아래는 "Hello world"라는 문자열에서 특정 문자나 문자열을 찾는 간단한 예시다.

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

        String it = "Hello world";

        System.out.println( it.indexOf("H") );  // 0
        System.out.println( it.indexOf("l") ); // 2
        System.out.println( it.indexOf("ll") ); // 2
        System.out.println( it.indexOf("llo") ); // 2

        System.out.println( it.indexOf("w") ); // 6
        System.out.println( it.indexOf("d") ); // 10
        System.out.println( it.indexOf("Hello world") ); // 0
    }
}

문자열은 0부터 시작한다는 것과 중복되는 단어가 있더라도 앞에서부터 가장 먼저 찾은 단어의 인덱스 번호를 출력하는 게 눈에 띈다. 또한 "ll"이나 "llo"처럼 붙어있는 단어를 찾았을 때도 가장 앞에 있는 인덱스 번호를 내놓는다.

indexOf(String str, int fromIndex)

문자열이 길게 이어졌을 때 특정한 단어가 몇번 사용됐는지 확인할 수도 있다.

아래 예제는 indexOf()에 재귀함수 개념을 이용해서 구현했다. "hello java world hello java world"라는 문자열에서 "hello"의 개수를 찾는 프로그램이다.

public class StringCount {
    private int count;
    private String word = "";
    // 개수를 세기 위한 변수 count와 문자열을 저장할 변수 word를 선언

    public StringCount(String word){
        this.word = word;
    } // 메인 메서드에서 word 값을 받아오고 초기화 해주는 생성자

    public int stringCount(String s){
        return stringCount(s, 0);
    } // 메인 메서드에서 찾으려는 문자열을 받아와서 stringCount(String s, int pos)로 보내는 역할

    public int stringCount(String s, int pos){
        int index = 0; 
        if(s == null || s.length() == 0)
            return 0; // 입력한 문자열 존재 확인. 문자열이 null이 아니거나 길이가 0이 아닌지.
        if((index = word.indexOf(s, pos)) != -1) { // word.indexOf(s, pos) -> word에 저장된 "hello java world hello java world"에서 "hello"를 pos번째부터 찾고 그 값을 index에 저장. 그 값이 -1이 아닌지(찾았는지) 확인.
            count++; // 찾을 때마다 count를 1 증가.
            stringCount(s, index + s.length()); // 재귀함수. s는 그대로 두고 index에 찾으려는 문자열의 길이를 더해서 같은 작업을 stringCount(String s, int pos)에서 재시작.
        }
        return count;
    }

    public static void main(String[] args) {
        String str = "hello java world hello java world";
        System.out.println(str);

        StringCount sc = new StringCount(str); // 객체 생성하며 생성자 호출. word에 str 주소값 대입
        System.out.println("hello의 개수는? " + sc.stringCount("hello") + "개");
    }
}

실행 결과

hello java world hello java world
hello의 개수는? 2개
반응형

댓글

Designed by JB FACTORY