我想确定一个字符串,如果它有连续的字符是相同的。所以,我想,这将返回一个方法如下:如何检查Java字符串中的连续双字符
- “嗒嗒” - 返回false
- “blaah” - 返回true
- “多嘴” - 返回false
到目前为止,我想出了这个:
public static boolean hasConsecutiveDuplicateCharacter(String str) {
return (str.matches("(.)\\1"));
}
但它不起作用。
我想确定一个字符串,如果它有连续的字符是相同的。所以,我想,这将返回一个方法如下:如何检查Java字符串中的连续双字符
到目前为止,我想出了这个:
public static boolean hasConsecutiveDuplicateCharacter(String str) {
return (str.matches("(.)\\1"));
}
但它不起作用。
您的正则表达式逻辑涉及反向引用在逻辑上是正确的。但是,String#matches()
将匹配模式的整个字符串。因此,如果使用涵盖完整的字符串的模式您的辅助方法,应该工作:
.*(.)\\1.*
代码:
public static boolean hasConsecutiveDuplicateCharacter(String str) {
return (str.matches(".*(.)\\1.*"));
}
无论你决定使用matches()
或使用正式的模式匹配依赖于你的需求等等,但无论如何我相信matches
无论如何都会使用一个匹配器。
对于其他人可能访问此页面...这是我尝试的解决方案,现在对我来说工作正常。其他帖子也很好阅读。感谢所有的帮助! – user2318704
您不希望模式匹配整个字符串。相反,你想找到一个匹配的子字符串。
要做到这一点,使用Matcher#find
public static boolean hasConsecutiveDuplicateCharacter(String str) {
Pattern p = Pattern.compile("(.)\\1");
Matcher m = p.matcher(str);
return m.find();
}
感谢您的解释 - 非常有用! – user2318704
使用'pattern'和'matcher'。 'matches'检查整个字符串。 – Jerry
已经有两个类似的答案,所以我不会发布我的,但[这里](https://ideone.com/MB1cuv)是一个ideone测试这样的解决方案之一。 – Aaron
嗨,对不起,提出重复。谢谢您的帮助。 – user2318704