2012-11-06 226 views
0

我有一個不大不小的問題與此代碼:字符串匹配,Java的

String[] paragraph; 
if(paragraph[searchKeyword_counter].matches("(.*)(\\b)"+"is"+"(\\b)(.*)")){ 

,如果我沒有記錯使用.matches()而在字符串搜索特定的角色,我需要一個.*但我想發生的是搜索一個字符而不將它匹配到另一個字詞。 例如is我要搜索的關鍵字我不希望它與包含is字符的單詞相匹配,例如ship, his, this。所以我用\b作爲邊界,但上面的代碼不適合我。

例子:

String[] Content= {"is,","his","fish","ish","its","is"}; 
String keyword = "is"; 
for(int i=0;i<Content.length;i++){ 
    if(content[i].matches("(.*)(\\b)"+keyword+"(\\b)(.*)")){ 
     System.out.println("There are "+i+" is."); 
    } 
} 

什麼,我想在這裏發生的是,它只會匹配is is,但與his fish。所以is應該匹配is, and is這意味着我希望它匹配,即使字符旁邊是非字母數字字符和空格。

上面的代碼有什麼問題?

如果其中一個內容具有大寫字母示例IS,並且它與is比較,它將無法匹敵。如果我錯了,請糾正我的錯誤。 如何在不更改源內容的情況下將較低的外殼字符與較高的外殼字符進行匹配?

+0

是第[searchKeyword_counter] java.util.Pattern的實例? – Aubin

+1

你可以給一些文本樣本,預期結果嗎? – Aubin

+1

你的代碼似乎工作得很好,你的問題是什麼? – Keppil

回答

0
String string = "..."; 
String word = "is"; 

Pattern p = Pattern.compile("\\b" + Pattern.quote(word) + "\\b"); 
Matcher m = p.matcher(string); 
if (m.find()) { 
    ... 
} 
+0

儘管答案對結果並不正確,但我不同意它的當前狀態: - 關於OP的問題,或者這個答案的代碼,沒有給出任何解釋。 - 另外,我認爲代碼雖然沒有錯誤,但並不適用於所描述的預期目的。 ---爲了防止對有此問題或類似問題的社區成員造成誤導,我認爲[-1]是有序的,直到這個答案得到改進或刪除。 – XenoRo

+0

@TheLima - 我尊重你的意見,歡迎你提出任何答案,即使你所有的上述想法,但請不要垃圾我的答案與sooooo chatty評論。如果您刪除所有上述評論,我將不勝感激。我尊重你,即使你有權下降我的權利,但如果可能的話,我想清楚我的帖子......謝謝你,主席先生。 –

0

只是添加空格這樣的:

假設消息等於你的內容字符串和模式是關鍵字

if ((message).matches(".* " + pattern + " .*")||(message).matches("^" + pattern + " .*") 
      ||(message).matches(".* " + pattern + "$")) {