所以我分配了一项奖励任务,它要求编写一个程序,如果给定字符串中至少有一个字符重复,则该程序返回 true。
我对正则表达式比较陌生,但据我所知,这应该可行:
String input = "wool";
return input.matches(".*(.)/1+.*");
这应该返回 true,因为开头和结尾的“.*”表示可能有前缀或后缀。 '(.)/1+' 是任何字符的重复模式。
正如我所说,我对正则表达式的东西相对较新,但我对学习和理解它非常感兴趣。
最佳答案
几乎完美,只是 /
看起来不对(应该是 \
)。
此外,前缀和后缀不需要 .*
- regexp 将在字符串中的任何位置找到匹配项,因此 (.)\1
就足够了。这不是一个错误,只是一种优化(尽管在其他情况下它可能并且确实会产生影响)。
还有一个问题是反斜杠是 Java 字符串中的特殊字符,因此当您在 Java 中编写正则表达式时,需要将反斜杠加倍。这给你:
return input.matches(".*(.)\\1.*");
编辑:我忘了,你不需要 +
因为如果某件事重复 3 次,它也会重复 2 次,所以你只需搜索就能找到它两个字符的重复。再说一次,这不是错误,只是这里不需要。
Kita 有一个很好的观点,即您的任务没有明确定义,因为它没有说明您是在查找彼此相邻的重复字符还是在字符串中的任何位置。我的解决方案是针对相邻的字符;如果您需要在任何地方重复,请使用他的。
EDIT2 注释后:忘记了 .matches
的语义。你们说得非常正确,编辑得当。
关于java - 使用正则表达式查找字符串中至少一个重复字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26373253/