Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java split() 함수를 활용한 매트릭스 내 문자열 검색 방법

Java에서 split() 함수를 활용하면 별도의 검색 라이브러리 없이도 매트릭스(문자열 2차원 배열) 안에 특정 문자열이 존재하는지 손쉽게 확인할 수 있습니다. 이번 글에서는 가로(행) 방향과 세로(열) 방향 모두에서 문자열을 검색하는 방법을 예제 코드와 함께 자세히 알아보겠습니다.


예제 코드

import java.util.*;
public class Demo {
   public static int search_string(String[] my_matrix, String search_string){
      for (String input : my_matrix){
         String[] my_value = input.split(search_string);
         if (my_value.length >= 2 || my_value.length == 0){
            return 1;
         }
         else if (my_value.length == 1 && input.length() != my_value[0].length()){
            return 1;
         }
      }
      return 0;
   }
   public static String[] vertical_search(String[] my_matrix){
      String[] vertical_search_value = new String[my_matrix[0].length()];
      for (int i = 0; i < my_matrix[0].length(); i++){
         String temp = "";
         for (int j = 0; j < my_matrix.length; j++)
            temp += my_matrix[j].charAt(i);
         vertical_search_value[i] = temp;
      }
      return vertical_search_value;
   }
   public static void main(String[] args){
      String[] my_matrix = { "This", "Sample", "This" };
      String search_string = "This";
      String[] vertical_matrix = vertical_search(my_matrix);
      int horizontal_search_result = search_string(my_matrix, search_string);
      int vertical_search_result = search_string(vertical_matrix, search_string);
      if (horizontal_search_result == 1 || vertical_search_result == 1)
         System.out.println("The string has been found in the matrix");
      else
         System.out.println("The string couldn't be found in the matrix");
   }
}

실행 결과

The string has been found in the matrix

코드 동작 원리

위 코드에는 Demo라는 클래스가 정의되어 있으며, 그 안의 search_string 함수는 각 행의 문자열을 split() 메서드로 분리한 뒤 결과 배열의 길이를 확인합니다.

만약 한 행 전체가 검색 문자열과 완전히 일치한다면, 분리 결과 길이가 0인 배열이 반환됩니다. 반대로 검색하려는 문자열이 행 내부의 다른 문자들 사이에 끼어 있는 경우에는 배열의 길이가 1보다 크게 됩니다.

배열의 길이가 정확히 1이 되는 경우는 다음 세 가지뿐입니다:

  • 검색 문자열이 행의 앞쪽(첫 부분)에 위치한 경우
  • 검색 문자열이 행의 뒤쪽(마지막 부분)에 위치한 경우
  • 검색 문자열이 해당 행에 아예 존재하지 않는 경우

이때 마지막 두 번째 조건을 걸러내기 위해, 원본 문자열의 길이와 분리된 첫 번째 요소의 길이를 비교합니다. 두 길이가 같지 않다면 문자열이 실제로 포함되어 있음을 의미하므로 검색 성공(1)을 반환합니다.


세로 방향 검색 처리

행 단위 검색만으로는 열 방향에 숨어 있는 문자열을 놓칠 수 있습니다. 이를 해결하기 위해 vertical_search 함수가 사용됩니다. 이 함수는 매트릭스를 전치(transpose)하여 각 열의 문자들을 하나의 문자열로 재구성한 뒤, 동일한 search_string 함수를 호출해 다시 검색을 수행합니다.

결과적으로 가로 방향 검색과 세로 방향 검색 중 하나라도 성공하면 해당 문자열은 매트릭스에 존재하는 것으로 판단됩니다. 이처럼 split() 함수의 반환 배열 길이 특성을 활용하면 간결하고 효율적인 문자열 검색 로직을 구현할 수 있습니다.