0

例如,

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

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

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

例如,“apple”和“applet”可以适合“a _ _ l e”,因为字母匹配并适合空格,所以它会输出 2。

Car 显然不适合,因为它确实不完整单词的第一个字母不以 a 开头。

Argyle 也不适合,因为不完整单词的第四个字母不是 y。

第五个字母的 addle 也是如此。

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

编辑:谢谢大家!在大家的帮助下,我能够得到它!

4

3 回答 3

2
public boolean equalsGuess(String maskedWord, String word){
 // compare length, take decision
 // convert to char array, iterate through it, ignore comparison for marked char
}
于 2013-10-10T17:45:05.950 回答
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来表示每个模式。

于 2013-10-10T17:57:06.767 回答
0

Java 8 解决方案:

Arrays.asList(array).stream()

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

    .collect(Collectors.toList()).size()
于 2013-10-11T09:19:30.477 回答