有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用正则表达式查找字符串中至少一个重复字符

因此,我分配了一个额外的任务,它要求编写一个程序,如果给定字符串中至少有一个字符被重复,该程序将返回true

我对正则表达式比较陌生,但据我所知,这应该是可行的:

String input = "wool";
return input.matches(".*(.)/1+.*");

这应该返回true,因为“.*”在开头和结尾表示可能有前缀或后缀。和“()/“1+”是任何字符的重复模式

正如我所说,我对regex的东西比较陌生,但我对学习和理解它非常感兴趣


共 (3) 个答案

  1. # 1 楼答案

    几乎完美,只是/看起来不对(应该是\

    此外,前缀和后缀不需要.*,regexp将在字符串的任何地方找到匹配项,因此(.)\1后缀。这不是一个错误,只是一种优化(尽管在其他情况下,它可能也确实会产生影响)

    还有一个问题是,反斜杠是Java字符串中的特殊字符,所以当您用Java编写regexp时,需要加倍使用反斜杠。这给了你:

    return input.matches(".*(.)\\1.*");
    

    编辑:我忘了,你不需要+,因为如果某个东西重复3次,它也会重复2次,所以你只需搜索两个字符的重复就可以找到它。再说一遍,这不是一个错误,只是这里不需要

    Kita有一个很好的观点,那就是你的任务没有很好的定义,因为它没有说明你是在寻找彼此相邻的重复字符还是字符串中的任何地方。我的解决方案是针对相邻的角色;如果你需要在任何地方重复,使用他的

    评论后的编辑:忘记了.matches的语义。你们说得很对,编辑得很恰当

  2. # 2 楼答案

    如果任务“在给定字符串中至少重复一个字符”包括以下模式:

    • abcbdb重复)

    那么regex模式将是:

    (.).*\1
    

    此模式假定其他字符可能位于重复字符之间。否则

    (.)\1

    请注意,任务是捕获“至少有一个字符被重复”,这意味着识别单个事件就足够了,因此\1不必有+量词

    代码:

    return input.matches("(.).*\\1");
    

    或者

    return input.matches("(.)\\1");
    
  3. # 3 楼答案

    另一种解决方案是将元素添加到hashset中。然后检查字符串和哈希集的长度