2016-04-22 411 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。

相關問題