正则表达式查找Java中是否有相同的字符重复3次或更多次

时间:2017-12-14 05:20:05

标签: java regex

我的要求是只使用 Java 正则表达式来检查给定字符串是否包含在字符串中连续重复3次以上的相同字符。

例如:

"hello"  -> false
"ohhhhh" -> true
"whatsuppp" -> true

1 个答案:

答案 0 :(得分:7)

您可以使用以下正则表达式来解决您的问题:

^.*(.)\1\1.*$

<强>解释

  1. ^字符串的起点
  2. .*任何字符0到N次
  3. (.)捕获组中将由反向引用
  4. 使用的一个字符
  5. \1对捕获的角色的反向引用(我们称它为两次强制你的3次重复约束)
  6. .*任何字符0到N次
  7. $输入字符串的结尾
  8. 我已经测试过了:

    hello -> false
    ohhhhh -> true
    whatsuppp -> true
    aaa -> true
    aaahhhahj -> true
    abcdef -> false
    abceeedef -> true
    

    最后但并非最不重要的一点是,您必须在正则表达式中的每个反斜杠\之前添加反斜杠\,然后才能在Java代码中使用它。

    这将为您提供以下原型Java代码:

      ArrayList <String> strVector = new ArrayList<String>();
      strVector.add("hello");
      strVector.add("ohhhhh");
      strVector.add("whatsuppp");
      strVector.add("aaa");
      strVector.add("aaahhhahj");
      strVector.add("abcdef");
      strVector.add("abceeedef");
    
      Pattern pattern = Pattern.compile("^.*(.)\\1\\1.*$");
      Matcher matcher;        
    
      for(String elem:strVector)
      {
        System.out.println(elem);
        matcher = pattern.matcher(elem);
        if (matcher.find())System.out.println("Found you!");
        else System.out.println("Not Found!");
      }
    

    执行以下输出:

    hello
    Not Found!
    ohhhhh
    Found you!
    whatsuppp
    Found you!
    aaa
    Found you!
    aaahhhahj
    Found you!
    abcdef
    Not Found!
    abceeedef
    Found you!