2012-03-14 61 views
2

我需要在HTML源代碼中找到一個詞。另外我需要統計出現次數。我正在嘗試使用正則表達式。但它說找到0匹配。Java查找字符串中的詞

我正在使用正則表達式,因爲我認爲它是最好的方式。如果有更好的方法,請告訴我。

我需要在HTML源代碼中找到單詞「hsw.ads」的出現。

我採取了以下步驟。

int count = 0; 
{ 
    Pattern p = Pattern.compile(".*(hsw.ads).*"); 
    Matcher m = p.matcher(SourceCode); 
    while(m.find())count++; 
} 

但計數爲0;

請讓我知道您的解決方案。

謝謝。 幫助Seeker

+0

從模式的開頭和結尾刪除通配符,然後重試。 – 2012-03-14 21:59:23

回答

4

你應該試試這個。

private int getWordCount(String word,String source){ 
     int count = 0; 
     { 
      Pattern p = Pattern.compile(word); 
      Matcher m = p.matcher(source); 
      while(m.find()) count++; 
     } 
     return count; 
    } 

將要搜索的單詞(非模式)傳遞給字符串。

+0

謝謝@Mayur這是我正在尋找的東西。 – 2012-03-14 23:14:21

6

你不符合任何「表達」,所以可能是一個簡單的字符串搜索會更好。 commons-langStringUtils.countMatches(source, "yourword")

如果你不想包含commons-lang,你可以手動編寫。只需使用source.indexOf("yourword", x)多次,每次供應的x一個更大的價值(這是偏移量),直到它得到-1

+0

Hi @Bozho。謝謝你的回覆。我可以知道使用StringUtils導入的包嗎? – 2012-03-14 22:04:25

+0

我加了一個commons-lang的鏈接。你必須將jar添加到你的classpath中。然後FQN是org.apache.commons.lang3.StringUtils – Bozho 2012-03-14 22:05:33

+0

好的..謝謝..我已經在我的包和其他軟件包中包含了commons-lang。這就是爲什麼Eclipse IDE爲該類提供多個操作的原因,所以我問你。 – 2012-03-14 22:07:30

1

要查找的字符串在Java中,你可以使用String方法indexOf它告訴你第一個的索引您搜索的字符串的字符。要找到它們並計算它們,你可以做到這一點(可能有一個更快的方法,但這應該工作)。我會建議使用StringUtils CountMatches方法。

String temp = string; //Copy to save the string 
int count = 0; 
String a = "hsw.ads"; 
int i = 0; 

while(temp.indexOf(a, i) != -1) { 
    count++; 
    i = temp.indexof(a, i) + a.length() + 1; 
} 
+0

更好地使用'indexOf(a,i)'其中'i'每次增加 – Bozho 2012-03-14 22:03:08

+0

@Bizho好點我會解決它。 – twain249 2012-03-14 22:05:07

+0

'temp = string'似乎沒有必要。爲什麼不直接引用'string'? – 2012-03-14 22:31:17

0

StringUtils.countMatches(源碼,「hsw.ads」)應該工作,但是與方法堅持你有以上(這是有效的),我推薦的幾件事情:1。 正如約翰Haager提到,刪除開啓/關閉。*會幫助,因爲你正在尋找確切的子字符串 2.你想逃避'。'因爲你正在尋找一個文字'。'而不是通配符 3.我會讓此模式保持不變並重新使用它,而不是每次重新創建它。這就是說,我仍然建議使用上面的方法,但我認爲我只是指出你目前的方法在概念上並不存在缺陷;只缺少一些實施細節。

0

您的代碼和正則表達式是有效的。您不需要在正則表達式的開頭和結尾包含。*。例如:

String t = "hsw.ads hsw.ads hsw.ads"; 
int count = 0; 
Matcher m = Pattern.compile("hsw\\.ads").matcher(t); 
while (m.find()){ count++; } 

在這種情況下,計數爲3。還有一件事,如果你要使用正則表達式,如果你真的想專門找了「」 hsw和廣告之間的時期,你需要逃避它。