2017-04-14 8 views
2

StringにすべてStringsが含まれているかどうかを確認する方法Array文字列に配列のすべての文字列が含まれていることを確認してください

私の現在のコード:

String word = "abc"; 
String[] keywords = {"a", "d"}; 

for(int i = 0; i < keywords.length; i++){ 
    if(word.contains(keywords[i])){ 
     System.out.println("Yes"); 
    }else{ 
     System.out.println("No"); 
    } 
} 
+5

@Tomaskは有効な質問である限り、宿題は問題ではありません。 –

+0

現在のコードで何が問題になっていますか? –

答えて

5

のようになります。方法:

public static boolean containsAllWords(String word, String ...keywords) { 
    for (String k : keywords) 
     if (!word.contains(k)) return false; 
    return true; 
} 
3

すべてのキーワードが一致するかどうかを教えてくれますboolean変数を使用してください。既定値としてtrueに設定します。次に、すべてのkewordを確認します。単語に何かが含まれていない場合は、検索をやめ、変数をfalseに設定します。カウンタは、キーワードの長さに等しい

String word = "abc"; 
String[] keywords = {"a", "d"}; 

int counter = 0; 

for(int i = 0; i < keywords.length; i++){ 
    if(word.contains(keywords[i])){ 
     counter++; 
    } 
} 

if(counter == keywords.length){ 
    System.out.println("Yes"); 
}else{ 
    System.out.println("No"); 
} 

場合、それはすべての要素が含まれていることを意味します

boolean containsAll = true; 
for (String keyword : keywords){ 
    if (!word.contains(keyword)){ 
     containsAll = false; 
     break; 
    } 
} 
-2

は、単にカウンタを使用しています。このソリューションでは、単語に一致するキーワードの数を確認することもできます。

+0

申し訳ありませんが、私は何を得ていません – Aurasphere

-2

より良いコードは次のようになります。

for(String s: keywords){ 
    if(word.contains(s)){ 
     System.out.println("Yes"); 
    }else{ 
     System.out.println("No"); 
    } 
} 
+0

あなたは、breakステートメントを忘れています。コメントする前に – gifpif

+0

あなたのコードが正しいことを確認してくださいまた、あなたの説明を気にしてください。 –

2

は、Java 8+を使用している場合、すべての要素が1行で、あなたの条件に一致するならば、あなたはStreamとテストを使用することができます。以下のような以前のバージョンでは、

if (Stream.of(keywords).allMatch(word::contains)) { 
    System.out.println("Yes"); 
} else { 
    System.out.println("No"); 
} 

、またはあなたは上記が何をしているかを理解したいならば、それはあなたが別々にそれを包む場合、コードははるかに良くなり

boolean allMatch = true; 
for (String kw : keywords) { // <-- for each kw in keywords 
    if (!word.contains(kw)) { // <-- if "word" doesn't contain kw 
     allMatch = false;  // <-- set allMatch to false 
     break;    // <-- stop checking 
    } 
} 
if (allMatch) { 
    System.out.println("Yes"); 
} else { 
    System.out.println("No"); 
} 
0

キーワードが1個のCHが含まれている場合にのみ、このソリューションの作品arの場合、キーワードに1つ以上の文字が含まれていると、既に言及されている多くの回答があります。 1行で

は:

boolean contain = Arrays.asList(word.split("")).containsAll(Arrays.asList(keywords)); 

考え方は次のとおりです。

String word = "abc"; 
String[] split = word.split(""); 

は文字の配列を得るためにあなたの文字列を分割split = {a, b, c}

String[] keywords = {"a", "b"}; 

チェックあなたのarray1containsAll

boolean contain = Arrays.asList(split).containsAll(Arrays.asList(keywords)); 
+0

は 'keywords = {" ab "、" bc "}' – CoronA

+0

@CoronAでは動作しませんが、OPの例には1つの文字しか含まれていません。 –

+0

@JCF:アルゴリズムは通常例を解決するのではなく問題を解決します。 – CoronA

0

のいずれかを使用するのStringUtils(org.apache.commons.lang.StringUtils)を用いて、第2 array2のすべての要素が含まれている場合。キーワードの最初の出現のインデックスを返します。存在しない場合は-1を返します。

StringUtils.indexOfAny(word, keywords); 

またはArraysを使用すると、ブール値が返されます。

Arrays.asList(word).contains(keywords) 
関連する問題