我一直在尝试做的是将任何重复的字母替换为其字母的小写版本(在 java 中)。例如:
我想要一个映射的函数:
bob -> bob
bOb -> bob
bOOb -> bob
bOob -> bob
boOb -> bob
bob -> bob
Bob -> Bob
bOb -> bob
但是,我没有成功使用正则表达式(在 Java 中)做到这一点。
我尝试了以下方法:
String regex = "([A-za-z])\\1+";
String str ="bOob";
Pattern pattern = Pattern.compile(regex , Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.replaceAll("$1"));
但是,这将返回 bOb 而不是 bob。(它适用于 boOb)。
我也试过:
Pattern pattern = Pattern.compile("(?i)([A-Za-z0-9])(?=\\1)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
return matcher.replaceAll("");
这解决了一个问题,现在是 bOob -> bob 但带来了另一个问题,因为现在它将 boOb 映射到 bob。
注意:它还应该映射 BOobOoboObOoObooOoOoOoOoOOb -> Bobobobobob。
我觉得此时循环字符串并根据每个字符执行一些逻辑可能会更容易,但我只是不想放弃使用正则表达式......如果存在使用正则表达式的解决方案,是不是更多可能比遍历每个字符的循环更有效?
提前致谢!
PS:我知道在传递字符串之前可以将所有内容都小写,但这不是我想要的,因为它映射:
鲍勃->鲍勃