2013-10-10 44 views
0

例如,如何將數組和字符串匹配並輸出匹配數?

我有一個單詞的數組:蘋果,小程序,菱形花紋,變壞,汽車]

我也有一個不完整的字符串:「一_ _樂」

將如何我能輸出可能的比賽數量?

例如,「蘋果」和「小程序」可以安裝在「一_ _樂」,因爲字母匹配和適合在空格,所以它會輸出2

汽車顯然無法適應,因爲它不完整單詞的第一個字母是不是以a開頭的。

因爲不完整的單詞的第四個字母不是y,所以Argyle也不適合。

與第五個字母相同的東西。

編輯:這是我對我的代碼迄今:http://pastebin.com/FasLQ6Tr

編輯:謝謝大家!我得到了每個人的幫助!

+1

有你甚至開始思考這個問題,或者你只是想到那麼做的功課你嗎? – dcsohl

+1

有一個稱爲Regex的強大(有時令人困惑:)的功能。有一個谷歌。有幾個網站可以用來練習。 – Jaycal

回答

2
public boolean equalsGuess(String maskedWord, String word){ 
// compare length, take decision 
// convert to char array, iterate through it, ignore comparison for marked char 
} 
+0

起初我認爲這種方法是有道理的,但在問題中它說_both_「apple」和「applet」應該與「a__le」匹配,這似乎表明該模式不必在開始和結束時開始和字符串的結尾,但只發生在字符串的某處。 –

+0

但是再一次,「汽車顯然不適合,因爲它不完整的單詞的第一個字母不是以a開始。」這表明模式的第一個字母(和最後一個)字母應與字符串的第一個(和最後一個)字母匹配。 –

0

這些類型的'模式'是正則表達式的設計目的。 您可以使用通配符.來表示每個不完整的單詞作爲正則表達式來表示空白。所以,你的例子會變成{"a..le", ".d."}

然後,計算可能的匹配的數量會遍歷所有的每個模式的單詞和增加計的問題,如果該模式的匹配單詞:

String[] words = {"apple", "applet", "argyle", "addle", "car"}; 
    String[] patterns = {"a..le", ".d."}; 

    int count = 0; 
    for (String pattern : patterns) { 
     Pattern regex = Pattern.compile(pattern); 
     for (String word : words) { 
      if (regex.matcher(word).matches()) count++; 
     } 
    } 

    System.out.println(count); // prints 2 

但是,如果你的數據集是巨大的,正則表達式可能太慢。 在這種情況下,我會建議實施trie來表示每種模式。

+0

如果「apple」和「applet」都應該與「a__le」相匹配,那麼它就像是「.d」。應至少與「addle」匹配一次,所以如果我們要計算多種匹配方式,count應該至少爲3,可能爲4。 –

+0

但是,然後再次,「汽車顯然不適合,因爲它不完整的單詞的第一個字母不是以a開頭。「這表明模式的第一個字母(和最後一個)字母應該與字符串的第一個(也是最後一個)字母匹配。 –

0

的Java 8解決方案:

Arrays.asList(array).stream() 

    .filter(x -> x.matches("a..le.*")) 

    .collect(Collectors.toList()).size()