2016-04-22 289 views
2

有没有办法检查子字符串是否包含完整的WORD,而不是子字符串。检查字符串是否包含字(不是子字符串!)

的Envision以下情形:

public class Test { 
    public static void main(String[] args) { 
     String[] text = {"this is a", "banana"}; 
     String search = "a"; 

     int counter = 0; 
     for(int i = 0; i < text.length; i++) { 
      if(text[i].toLowerCase().contains(search)) { 
       counter++; 
      } 
     } 

     System.out.println("Counter was " + counter); 
    } 
} 

这个计算结果为

Counter was 2 

这是不是我要找的,因为在“A”这个词只有一个实例阵列。

我读它是如下的方式:

的IF试验发现一个“A”在文本[0]中,“A”对应于“这是[A]”。但是,它也会在“香蕉”中找到“a”,从而增加柜台。

我该如何解决这个问题,只包含WORD'a',而不是包含?的子串?

谢谢!

+0

查看我的回答 –

回答

5

你可以使用正则表达式,使用Pattern.quote逃脱了任何特殊字符。

String regex = ".*\\b" + Pattern.quote(search) + "\\b.*"; // \b is a word boundary 

int counter = 0; 
for(int i = 0; i < text.length; i++) { 
    if(text[i].toLowerCase().matches(regex)) { 
     counter++; 
    } 
} 

注意,这也将在"this is a; pause""Looking for an a?"找到"a"其中a并不之后有一个空格。

+2

' if(text [i] .toLowerCase()。matches(regex)){' – Nirekin

+0

@Guillaume谢谢。 –

+0

谢谢! 但是,我收到消息“方法quote(字符串)未定义的类型模式”)。 – northerner

-1

如果的话都用空格隔开,那么你可以做:

if((" "+text[i].toLowerCase()+" ").contains(" "+search+" ")) 
{ 
    ... 
} 

这增加了两个空间,以原始字符串。
例如:"this is a"变为" this is a "

然后它搜索单词和侧翼空格。 例如:它搜索" a "search"a"

+0

如果a处于开始或结束状态,该怎么办? – Nadir

+1

@Nadir这正是我们为什么要添加空格! – Hackerdarshi

+0

@Nadir看到这个:**“”** + text [i] .toLowerCase()+ **“”** – Hackerdarshi

1

可以试试这样:

for(int i = 0; i < text.length; i++) { 
    String[] words = text[i].split("\\s+"); 
    for (String word : words) 
     if(word.equalsIgnoreCase(search)) { 
      counter++; 
      break; 
     } 
} 
0
Arrays.asList("this is a banana".split(" ")).stream().filter((s) -> s.equals("a")).count(); 
0

当然,正如其他人写的,你就可以开始用各种模式的玩弄于比赛“字”出“文”。

但事情是:根据你必须解决的基本问题,这可能(目前)不够好。意思是:你是否面临在某些字符串中找到某种模式的问题...或者是否真的需要用“人类语言”的意义解释该文本?你知道,当有人写下文字时,可能会有微妙的错别字,怪异的字符;所有这些使得很难在文本中“找到”某个单词的东西。除非您深入了解事物的“语言处理”方面。长话短说:如果你的工作是“在字符串中找到某些模式”;那么所有其他答案都会做。但是如果你的要求超出了这个范围,就像“某些人将会使用你的应用程序'搜索'庞大的数据集”;那么你最好现在停下来;并考虑转向支持全文的搜索引擎,如ElasticSearch或Solr。

相关问题