如何将数组和字符串匹配在一起并输出匹配数?

时间:2013-10-10 17:42:55

标签: java arrays

例如,

我有一个包含单词的数组:[apple,applet,argyle,addle,car]

我也有一个不完整的字符串:“a _ _ l e”

我如何输出可能的匹配数?

例如,“apple”和“applet”可以放在“a _ _ l e”中,因为字母匹配并适合空格,因此它将输出2.

汽车显然无法适应,因为它确实不完整单词的第一个字母不以a开头。

Argyle无法适应,因为不完整单词的第四个字母不是y。

addle与第五个字母相同。

编辑:这是我迄今为止对我的代码所拥有的:http://pastebin.com/FasLQ6Tr

编辑:谢谢大家!我得到了大家的帮助!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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来表示每种模式。

答案 2 :(得分:0)

Java 8解决方案:

Arrays.asList(array).stream()

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

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