[자바/JAVA] indexOf() 특정 문자열 찾는법
- Java
- 2021. 5. 15.
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 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개
반응형
'Java' 카테고리의 다른 글
[자바/JAVA] 짧게 후려치는 Generic의 개념과 문법 (0) | 2021.05.16 |
---|---|
[자바/JAVA] substring() 메서드로 파일과 확장자명 구분 짓기 (0) | 2021.05.16 |
[자바/JAVA] Object 클래스 toString() 메서드 활용법 (0) | 2021.05.14 |
[자바/JAVA] 많이 활용되는 equals(Object obj) 메서드, 구현부 의미는 (0) | 2021.05.13 |
[자바/JAVA] 참조 변수 형변환 : 상속 관계 일때 (0) | 2021.05.11 |