我有一个String s="666788899"
我需要将其输出为600780090
java中是否有任何正则表达式可以用来更改这样的字符串。
我用简单的方法解决了这个问题。实际上我正在解决一个问题,其中包括另一个带有这样的字符串数组的循环。包括我的内部循环,它会上升到 O(n^2),这是 Not Acceptable 。
int len=str.length();
char c=str.charAt(0);
for(int i=1;i<len;i++)
{
if(str.charAt(i)==c)
{
str.setCharAt(i,'0');
}
else
c=str.charAt(i);
}
输入字符串:
3888667222
输出字符串:
3800607200
最佳答案
您可以仅使用
.replaceAll("(?<=(.))\\1", "0")
或者,如果您需要允许匹配换行符,
.replaceAll("(?s)(?<=(.))\\1", "0")
请参阅regex demo和 Java demo online :
System.out.println("666788899".replaceAll("(?<=(.))\\1", "0")); // => 600780090
System.out.println("3888667222".replaceAll("(?<=(.))\\1", "0")); // => 3800607200
详细信息
-
(?s)
-Pattern.DOTALL
内嵌嵌入标志 -
(?<=(.))
- 包含与组 1 任何字符匹配的捕获组的正向后查找 -
\1
- 内联反向引用,匹配并使用与前一个字符相同的下一个字符。
因此,第一个字符始终保留,而后续字符则替换为 0
.
关于java - 如何使用正则表达式将字符串中的连续重复字符替换为 '0'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57442297/