2013-12-11 73 views
0

我正在编写加载String的ArrayList并检查是否使用特定单词的代码。这听起来很奇怪,但具体是:查找ArrayList中的特定单词

包含“嘟嘟”(任何大写字母,并允许零(0)代替哦(o),例如“to0t”)的嘟嘟数也应计算在内)。然而,如果它只包含“toot”作为另一部作品的一部分,则不应该算作一个toot,例如,“tooter”不足以数出一个toot。

我已经尝试了很多东西,但它似乎仍然没有工作,并计算出正确的结果。

这是我现在有来自会员一定的帮助后:

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

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

** 1嘟嘟2 t00t

嘟嘟

会回来

toote r tooting **

结果应该显示2作为tooter和tooting不是单词“toot”与O或0的变化。

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

+0

,我只能看到toot'的'一个实例作为'toots'和't00ts'不应计入按你的例子​​。 –

+0

你说得对,对不起。我改变了它。 – user3089390

回答

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

+0

你可能解决了它! – user3089390

+1

你也可以忽略大小写:(?i)。* \ bt [o0] {2} t \ b。* – bcorso

+0

你从哪里得到图像? – bcorso