2017-09-08 96 views
0

我想确定一个字符串,如果它有连续的字符是相同的。所以,我想,这将返回一个方法如下:如何检查Java字符串中的连续双字符

  • “嗒嗒” - 返回false
  • “blaah” - 返回true
  • “多嘴” - 返回false

到目前为止,我想出了这个:

public static boolean hasConsecutiveDuplicateCharacter(String str) { 
    return (str.matches("(.)\\1")); 
} 

但它不起作用。

+0

使用'pattern'和'matcher'。 'matches'检查整个字符串。 – Jerry

+0

已经有两个类似的答案,所以我不会发布我的,但[这里](https://ideone.com/MB1cuv)是一个ideone测试这样的解决方案之一。 – Aaron

+0

嗨,对不起,提出重复。谢谢您的帮助。 – user2318704

回答

1

您的正则表达式逻辑涉及反向引用在逻辑上是正确的。但是,String#matches()将匹配模式的整个字符串。因此,如果使用涵盖完整的字符串的模式您的辅助方法,应该工作:

.*(.)\\1.* 

代码:

public static boolean hasConsecutiveDuplicateCharacter(String str) { 
    return (str.matches(".*(.)\\1.*")); 
} 

无论你决定使用matches()或使用正式的模式匹配依赖于你的需求等等,但无论如何我相信matches无论如何都会使用一个匹配器。

+0

对于其他人可能访问此页面...这是我尝试的解决方案,现在对我来说工作正常。其他帖子也很好阅读。感谢所有的帮助! – user2318704

2

您不希望模式匹配整个字符串。相反,你想找到一个匹配的子字符串。

要做到这一点,使用Matcher#find

public static boolean hasConsecutiveDuplicateCharacter(String str) { 
    Pattern p = Pattern.compile("(.)\\1"); 
    Matcher m = p.matcher(str); 
    return m.find(); 
} 
+0

感谢您的解释 - 非常有用! – user2318704

0
String[] ss = { "AABB", "abc", "azzo", "suio", "suii" }; 

    String regex = "([a-zA-Z])\\1"; 
    Pattern pattern = Pattern.compile(regex); 

    for (String string : ss) { 
     Matcher match = pattern.matcher(string); 
     if (match.find()) { 
      System.out.println(string); 
     } 
    } 

enter image description here

相关问题