web-dev-qa-db-ja.com

Java、リストに文字列が含まれる場合に戻ります

Javaでは、List<String> myListに文字列が存在するかどうかを確認します。

このようなもの:

if(myList.contains("A")){
    //true
}else{
    // false
}

問題は、myListにトリミングされていないデータが含まれることがあることです。

{'  A', 'B  ', '  C  '}

アイテム'B'がリストにある場合、trueを返します。どうすればいいですか?ループ構造を避けたい。

51
Reddy

リストを反復処理し、検索のために String#trim を呼び出す必要があります。

String search = "A";
for(String str: myList) {
    if(str.trim().contains(search))
       return true;
}
return false;

または、大文字と小文字の区別を無視するを実行する場合は、次を使用します:

search = search.toLowerCase(); // outside loop

// inside the loop
if(str.trim().toLowerCase().contains(search))
48
anubhava

Java 8 Stream APIの場合:

List<String> myList = Arrays.asList("  A", "B  ", "  C  ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
66
rogermenezes

正規表現を使用して、1行で実行できます。

if (myList.toString().matches(".*\\bA\\b.*"))

このコードは非常にうまく機能するはずです。


ところで、次のように変数から正規表現を構築できます:

.matches("\\[.*\\b" + Word + "\\b.*]")

検索語の開始/終了に開き/閉じ角括弧が含まれる場合に誤検出の一致を防ぐために、[]を各端に追加しました。

14
Bohemian
String search = "A";
for(String s : myList)
    if(s.contains(search)) return true;
return false;

これにより、リスト内の各文字列が反復処理され、探している文字列が含まれているかどうかが確認されます。トラップしたいスペースだけの場合、これを行うことができます:

String search = "A";
for(String s : myList)
    if(s.replaceAll(" ","").contains(search)) return true;
return false;

検索する前に、最初にスペースを空の文字列に置き換えます。さらに、最初に文字列をトリミングするだけの場合は、次の操作を実行できます。

String search = "A";
for(String s : myList)
    if(s.trim().contains(search)) return true;
return false;
7
Aza

これを試して:

for(String str: myList) {
    if(str.trim().equals("A"))
       return true;
}
return false;

containscontainsstringcontainsと同じではないため、Listの代わりにstr.equalsまたはstr.equalsIgnoreCaseを使用する必要があります。

List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
4
nkukhar

これを行うには、近似文字列一致ライブラリを使用できる場合があります。 SecondString 、しかしそれはほぼ間違いなく過剰です-代わりに提供されるfor-loop回答の1つを使用してください。

独自のコードを使用できます。上記のループ構造を使用したくない場合は、ループ構造を使用する必要はありません。あなただけがスペースを削除したり、リストの文字列をトリムするために集中する必要があります。

Java8を使用している場合、コードの1行を使用して文字列を単純にトリミングできます。

myList = myList.stream().map(String :: trim).collect(Collectors.toList());

上記の行の重要性は、将来、リストまたはセットを使用できるようになることです。これで、独自のコードを使用できます。

if(myList.contains("A")){
    //true
}else{
    // false
}
1
vikash