2012-11-06 148 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 + "$")) {