8월 30, 2023

JAVA indexOf 활용법 (indexOf 위치, lastIndexOf)

오늘은 자바 소스에서 자주 보이는 
Java indexOf 문법 활용법에 대해 알아보도록 하겠다. 

1. 찾고자하는String.indexOf (String s) 

indexOf 함수를 쓰고자 할 떄는 내가 찾고자 하는 문자열과 준비된 문자열 이렇게 두 개가 있어야 한다. 

예를 들어, 

 

class Main{
	public static void main(String args[]){
    	String toBeFound = "apple"; //포함되어 있는지 확인할 문자열
        String wholeWords = "orangeapplebanana"; //전체 문자열
        
        System.out.println(toBeFound.indexOf(wholeWords)); //6
        System.out.println(toBeFound.indexOf("Helloooo"); //-1
    }
}

예를 들어, 위 예제를 보면 이해가 잘 될텐데, 
여기서 apple (toBeFound)은 우리가 찾고자 하는 문자열이고 
찾고자 하는 대상은 orangeapplebanana (wholeWords)이다. 

indexOf 함수는 특정 문자나 문자열에서 해당하는 문자의 인덱스 값을 반환한다. 

따라서 첫 번째 예제인, 

 

System.out.println(toBeFound.indexOf(wholeWords)); //6

여기서는 apple이 가장 먼저 시작되는 6번째 자리를 가져오게 된다. 

Java는 0번째 index부터 따지게 되고, indexOf의 경우 찾으려는 문자열이 1자리가 아니더라도 가장 처음 자릿수를 가져오게 된다는 점을 기억하면 된다. 

 

indexOf의 경우에는 찾고자 하는 문자열이 없을 경우 -1 을 return 한다는 점을 활용하면 찾고자 하는 문자열이 여러개이더라도 쉽게 이를 걸러낼 수 있다. 

 

class Main{
	public static void main(String args[]){
        System.out.println("[banana, apple]".indexOf("grape")); //-1
    }
}

 

위 코드와 같이 내가 전체 String에서 banana와 apple이 둘다 없는지를 검사하고 싶다면 코드를 두 줄로 쓰지 않고 한 줄로 가능하다. 

 

"grape"라는 String에 banana도 없고 apple도 없다면 -1을 return 할 것이기 때문이다. 

 

이런식으로 편리하게 로직을 짜서 사용할 수 있다. 


 

2. indexOf ("찾을 문자열" , "시작위치")

 

첫 번째 indexOf에서는 특정 String을 찾더라도 가장 처음 위치를 반환한다. 즉 "a,b,c,d"라는 string에서 내가 ","의 위치를 찾고 싶을 때 가장 처음 쉼표의 위치인 1을 return하는 것이다. 

 

만약 indexOf 의 두 번째 인자의 시작위치를 주게 되면 시작위치부터 문자열을 찾게 된다. 


3. lastIndexOf("찾을 string ") /  lastIndexOf("찾을 문자열", "시작 위치")

기본적으로 lastIndexOf는 indexOf와 사용법은 유사하나 

String의 뒤에서부터 탐색을 시작한다는 것이 차이점이다. 

 

뒤에서부터 문자열 탐색을 시작하더라도 index는 마지막 자리가 0인 것은 아니다. 

class Main{
	public static void main(String args[]){
        System.out.println("o".indexOf("Helloo"); //5
    }
}

이 경우 string의 가장 마지막부터 탐색을 시작하기 때문에 가장 마지막 o를 가져오는데 

index의 경우에는 H가 0부터 시작한다는 점은 동일하다.

 

따라서 가장 마지막 o의 index인 5를 가져오게 된다.