Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaのsplitメソッドを使ってマトリックス(行列)内の文字列を検索する方法

Javaのsplitメソッドを活用すると、マトリックス(行列)の中に特定の文字列が存在するかどうかを効率的に判定できます。この記事では、水平方向(行)だけでなく垂直方向(列)にも対応した文字列検索の実装例を紹介します。

サンプルコード

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を実行し、その結果得られる配列の長さをチェックします。splitメソッドの挙動には以下のような特徴があります。

  • 行全体が検索文字列と一致した場合:分割によって空の要素しか残らないため、配列の長さは0になります。
  • 検索文字列が行の中間に含まれる場合:前後の部分文字列に分かれるため、配列の長さは2以上になります。
  • 配列の長さが1になるケース:検索文字列が行の先頭側または末尾側にある場合、あるいは文字列が一切含まれない場合です。ただし、元の行の長さと分割後の要素の長さを比較することで、実際に文字列が含まれているかどうかを正確に判別できます。

これらの条件のいずれかに該当すれば、その行に検索文字列が存在すると判断され、メソッドは1を返します。

垂直方向(列)の検索について

vertical_searchメソッドは、マトリックスを転置(行と列の入れ替え)して新しい文字列配列を生成します。これにより、各列の文字を縦に連結した文字列が作られ、同じsearch_stringメソッドを再利用して列方向の検索が可能になります。

最後にmainメソッドでは、水平方向と垂直方向の両方の検索結果を確認し、どちらか一方でも文字列が見つかれば「The string has been found in the matrix」と出力します。見つからない場合は、その旨を示すメッセージが表示されます。

  1. Javaで空白文字を区切り文字として文字列を分割する方法

    JavaのStringクラスが提供するsplit()メソッドを使うと、指定した区切り文字(デリミタ)を基準に、現在の文字列をより小さな文字列に分割し、その結果を配列として取得できます。もし文字列内に指定した区切り文字が存在しない場合、このメソッドは元の文字列全体を唯一の要素とする配列を返します。空白文字を区切り文字として文字列を分割する手順空白文字を区切り文字として、文字列を配列に分割するには、以下の手順を実行します。対象となるソース文字列を読み込む。split()メソッドを呼び出し、引数として半角スペース「 」を渡す。結果の配列を出力する。サンプルコード次のJavaプログラムは、フ

  2. JavaでGsonのカスタムインスタンスクリエーター(InstanceCreator)を使う方法

    JSON文字列をJavaオブジェクトへ変換する(またはその逆を行う)際、Gsonはデフォルトでデフォルトコンストラクタを呼び出してJavaクラスのインスタンスを生成します。しかし、対象となるJavaクラスにデフォルトコンストラクタが存在しない場合や、オブジェクト生成時に何らかの初期設定を行いたい場合には、独自のインスタンスクリエーターを作成してGsonに登録する必要があります。 Gsonでカスタムインスタンスクリエーターを作成するには、InstanceCreatorインターフェースを使用し、createInstance(Type type)メソッドを実装します。 構文 T createInst