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() 함수의 반환 배열 길이 특성을 활용하면 간결하고 효율적인 문자열 검색 로직을 구현할 수 있습니다.