如何检查Java String中的连续双字符

时间:2017-09-08 12:43:47

标签: java regex

如果字符串具有相同的连续字符,我想识别它。所以,我想要一个返回以下内容的方法:

  • “blah” - 返回false
  • “blaah” - 返回true
  • “blab” - 返回false

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

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

但它不起作用。

3 个答案:

答案 0 :(得分:2)

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

为此,请使用Matcher#find

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

答案 1 :(得分:1)

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

.*(.)\\1.*

<强>代码:

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

您是否决定使用matches()或使用正式模式匹配器取决于您的需求等,但无论如何我相信matches无论如何都会使用匹配器。

答案 2 :(得分: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