Java/문자열

[Java]StringBuilder 특정 문자열의 위치 가져오는 방법

DevStory 2022. 8. 19.

StringBuilder 특정 문자열의 위치 가져오는 방법

이번 포스팅은 StringBuilder 클래스에서 제공하는 indexOf() 메서드와 lastIndexOf() 메서드를 사용하여 특정 문자열의 위치를 가져오는 방법을 소개합니다.


방법 1. 앞에서부터 검색 - indexOf 메서드

StringBuilder 클래스는 특정 문자열을 앞에서부터 검색하는 indexOf() 메서드를 제공합니다.

 

특정 문자열이 존재하면 인덱스를 반환하며, 존재하지 않으면 -1을 반환합니다.


예제 1. 기본 사용 방법

다음 예제는 StringBuilder에 문자열 "Java"와 "JavaScript"가 존재하는지 앞에서부터 검색합니다.

public static void main(String args[]) {
  StringBuilder sb = 
          new StringBuilder("Hello, Java! Hello, Java");

  System.out.println("문자열 \"Java\"의 위치? " +
          sb.indexOf("Java"));

  System.out.println("문자열 \"JavaScript\"의 위치? " +
          sb.indexOf("JavaScript"));
}

[실행 결과]

문자열 "Java"의 위치? 7
문자열 "JavaScript"의 위치? -1

StringBuilder에 문자열 "Java"가 두 개 존재하지만, indexOf() 메서드는 앞에서부터 검색하므로 맨 앞의 문자열 "Java"의 위치를 반환합니다.

 

문자열 "JavaScript"는 존재하지 않으므로 -1을 반환합니다.


예제 2. 검색 위치 설정

특정 위치부터 문자열을 검색하고 싶은 경우 검색 위치를 설정할 수 있습니다.

 

indexOf() 메서드의 두 번째 매개변수에 검색 위치를 전달합니다.

 

다음 예제는 검색 위치를 3과 8로 설정 후 문자열 "Java"가 존재하는지 검색합니다.

public static void main(String args[]) {
  StringBuilder sb =
          new StringBuilder("Hello, Java! Hello, Java");

  System.out.println("Index 3부터 문자열 \"Java\"를 검색: " +
          sb.indexOf("Java", 3));

  System.out.println("Index 8부터 문자열 \"Java\"를 검색: " +
          sb.indexOf("Java", 8));
}

[실행 결과]

Index 3부터 문자열 "Java"를 검색: 7
Index 8부터 문자열 "Java"를 검색: 20

방법 2. 뒤에서부터 검색 - lastIndexOf 메서드

StringBuilder 클래스는 특정 문자열을 뒤에서부터 검색하는 indexOf() 메서드를 제공합니다.

 

특정 문자열이 존재하면 인덱스를 반환하며, 존재하지 않으면 -1을 반환합니다.


예제 1. 기본 사용 방법

다음 예제는 StringBuilder에 문자열 "Java"와 "JavaScript"가 존재하는지 뒤에서부터 검색합니다.

public static void main(String args[]) {
  StringBuilder sb = 
          new StringBuilder("Hello, Java! Hello, Java");

  System.out.println("문자열 \"Java\"의 위치? " +
          sb.lastIndexOf("Java"));

  System.out.println("문자열 \"JavaScript\"의 위치? " +
          sb.lastIndexOf("JavaScript"));
}

[실행 결과]

문자열 "Java"의 위치? 20
문자열 "JavaScript"의 위치? -1

예제 2. 검색 위치 설정

특정 위치부터 문자열을 검색하고 싶은 경우 검색 위치를 설정할 수 있습니다.

 

lastIndexOf() 메서드의 두 번째 매개변수에 검색 위치를 전달합니다.

 

다음 예제는 검색 위치를 30과 15로 설정 후 문자열 "Java"가 StringBuilder에 존재하는지 뒤에서부터 검색합니다.

public static void main(String args[]) {
  StringBuilder sb =
          new StringBuilder("Hello, Java! Hello, Java");

  System.out.println("Index 30부터 문자열 \"Java\"를 역으로 검색: " +
          sb.lastIndexOf("Java", 30));

  System.out.println("Index 30부터 문자열 \"Java\"를 역으로 검색: " +
          sb.lastIndexOf("Java", 15 ));
}

[실행 결과]

Index 30부터 문자열 "Java"를 역으로 검색: 20
Index 30부터 문자열 "Java"를 역으로 검색: 7

lastIndexOf() 메서드의 두 번째 매개변수에 문자열의 길이를 초과한 값을 전달하면, 에러가 발생하지 않고 문자열 마지막 위치부터 역으로 검색합니다.


방법 3. 특정 문자열이 여러 개인 경우

StringBuilder에 특정 문자 또는 문자열이 여러 개인 경우가 있을 수 있습니다.

 

특정 문자 또는 문자열의 모든 위치를 찾으려면 StringBuilder를 순회하여 특정 문자열의 위치를 Integer 타입의 List에 할당합니다.

 

다음 예제는 StringBuilder에서 문자열 "Java"가 존재하는 모든 위치를 콘솔에 출력합니다.

public static void main(String args[]) {
  StringBuilder sb = new StringBuilder("Hello, Java! Hello, JavaScript");
  String specificString = "Java";

  List<Integer> intList = new ArrayList<>();

  int index = sb.indexOf(specificString);

  while(index > -1) {
    intList.add(index);
    index = sb.indexOf(specificString, index + 1);
  }

  System.out.println(Arrays.toString(intList.toArray()));
}

[실행 결과]

[7, 20]
반응형

댓글