1

複数のキーワードが一致する行があります。キーワード全体が一致する必要があります。

例、

 String str = "This is an example text for matching countries like Australia India England";

 if(str.contains("Australia") ||
    str.contains("India") ||
    str.contains("England")){
    System.out.println("Matches");
 }else{
    System.out.println("Does not match");
 }

このコードは正常に動作します。ただし、一致するキーワードが多すぎると、線が長くなります。 同じコードを書くエレガントな方法はありますか? ありがとう

4

4 に答える 4

4

国を配列に入れ、小さなヘルパー メソッドを使用します。Set を使用するとさらに便利になりますが、国のセットを構築するのは少し面倒です。次のようなものですが、必要に応じてより良い名前付けと null 処理を行います。

String[] countries = {"Australia", "India", "England"};
String str = "NAustraliaA";
if (containsAny(str, countries)) {
    System.out.println("Matches");
}
else {
    System.out.println("Does not match");
}

public static boolean containsAny(String toCheck, String[] values) {
    for (String s: values) {
        if (toCheck.contains(s)) {
            return true;
        }
     }
    return false;
}
于 2012-08-08T10:25:16.803 に答える
2
package com.test;

公開クラス プログラム {

private String str;

public Program() {
    str = "This is an example text for matching countries like Australia India England";
    // TODO Auto-generated constructor stub
}

public static void main(String[] args) {
    Program program = new Program();
    program.doWork();
}

private void doWork() {

    String[] tomatch = { "Australia", "India" ,"UK"};


    for(int i=0;i<tomatch.length;i++){
    if (match(tomatch[i])) {
        System.out.println(tomatch[i]+" Matches");
    } else {
        System.out.println(tomatch[i]+" Does not match");
    }
    }
}

private boolean match(String string) {

    if (str.contains(string)) {
        return true;
    }

    return false;
}

}

//----------------- 出力 オーストラリア 一致 インド 一致 英国 一致しない

于 2012-08-08T10:28:28.493 に答える
2

読みやすさの観点から、一致する文字列の ArrayList はエレガントです。単語が利用可能かどうかを確認するためにループを形成できます。そうでない場合は、キーワードが欠落していたことを示すフラグを設定します

すべてが一致する場合のようなもの

for (String checkStr : myList) {
 if(!str.contains(checkStr)) {
 flag=false;
 break;
}
}

いずれかが一致する必要がある場合

for (String checkStr : myList) {
 if(str.contains(checkStr)) {
 flag=true;
 break;
}
}
于 2012-08-08T10:17:56.283 に答える