Javaでは、List<String> myList
に文字列が存在するかどうかを確認します。
このようなもの:
if(myList.contains("A")){
//true
}else{
// false
}
問題は、myListにトリミングされていないデータが含まれることがあることです。
{' A', 'B ', ' C '}
アイテム'B'
がリストにある場合、trueを返します。どうすればいいですか?ループ構造を避けたい。
リストを反復処理し、検索のために 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))
Java 8 Stream APIの場合:
List<String> myList = Arrays.asList(" A", "B ", " C ");
return myList.stream().anyMatch(str -> str.trim().equals("B"));
正規表現を使用して、1行で実行できます。
if (myList.toString().matches(".*\\bA\\b.*"))
このコードは非常にうまく機能するはずです。
ところで、次のように変数から正規表現を構築できます:
.matches("\\[.*\\b" + Word + "\\b.*]")
検索語の開始/終了に開き/閉じ角括弧が含まれる場合に誤検出の一致を防ぐために、[
と]
を各端に追加しました。
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;
これを試して:
for(String str: myList) {
if(str.trim().equals("A"))
return true;
}
return false;
contains
のcontains
はstring
のcontains
と同じではないため、List
の代わりにstr.equals
またはstr.equalsIgnoreCase
を使用する必要があります。
List<String> s = Arrays.asList("BAB", "SAB", "DAS");
s.contains("A"); // false
"BAB".contains("A"); // true
これを行うには、近似文字列一致ライブラリを使用できる場合があります。 SecondString 、しかしそれはほぼ間違いなく過剰です-代わりに提供されるfor-loop回答の1つを使用してください。
独自のコードを使用できます。上記のループ構造を使用したくない場合は、ループ構造を使用する必要はありません。あなただけがスペースを削除したり、リストの文字列をトリムするために集中する必要があります。
Java8を使用している場合、コードの1行を使用して文字列を単純にトリミングできます。
myList = myList.stream().map(String :: trim).collect(Collectors.toList());
上記の行の重要性は、将来、リストまたはセットを使用できるようになることです。これで、独自のコードを使用できます。
if(myList.contains("A")){
//true
}else{
// false
}