在ArrayList中查找特定单词

时间:2013-12-11 04:09:39

标签: java

我正在编写一个加载字符串ArrayList的代码,并检查是否使用了特定的单词。这可能听起来很奇怪,但细节是:

包含“toot”的toots数量(任何大小写并允许零(0)代替oh(o),例如“to0t”也应计算在内);但是,如果它只包含“嘟嘟”作为另一项工作的一部分,你不应该算一个嘟嘟声,例如,“tooter”不足以计算一个嘟嘟声。

我尝试了很多东西,但它似乎仍然不起作用并计算出正确的结果。

以下是我在成员的帮助下现在所拥有的:

for (String toot : toots) {
        toot = toot.toLowerCase().replace("0", "o").trim();
        if(toot.equalsIgnoreCase("toot")){
           tootsWithToot++;
        }
}

一个例子是“toot messages”(每行是一个单独的消息):

** 1 toot 2 t00t

嘟嘟

将会回来

tooter tooting **

结果应该显示为2,因为嘟嘟声和嘟嘟声不是带有O或0变化的“嘟嘟”一词。

我认为改变应该是我需要的.contains但我不是100%肯定。 我再次为这个幽默的请求道歉,我仍然是一个新手程序员。

1 个答案:

答案 0 :(得分:2)

以下内容应符合您的要求。它使用正则表达式来匹配字符串的“整个单词”出现。

for (String toot : toots) {
    toot = toot.toLowerCase().replace("0", "o").trim();
    toot = toot.toLowerCase().replace("O", "o").trim();
    toot = toot.toLowerCase().replace("T", "t").trim();
    if(toot.matches(".*\\btoot\\b.*")){
        tootsWithToot++;
    }
}

更纯粹的正则表达式示例如下所示:

for (String toot : toots) {
    if(toot.matches(".*\\b[tT][oO0]{2}[tT]\\b.*")){
        tootsWithToot++;
    }
}

这个正则表达式匹配toot的实例,忽略t的[tT]和o的情况(同时也包括0)[oO0],当它们被任何分词符号包围时。

Regular expression visualization