java - 如何使用正则表达式将字符串中的连续重复字符替换为 '0'?

标签 java regex pattern-matching

我有一个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 demoJava 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/

相关文章:

mysql - 如何对子查询的结果使用正则表达式?

java - 如何停止 getNodeName() 并同时打印节点类型

java - XY block 渲染器 jfreechart 中 block 的轮廓

javascript - 结合 javascript 正则表达式

python - 你能用一个正则表达式来解析函数参数吗?

java - 如何在Java中跳过Regex的某些部分?

regex - 提取 "?"之后的文本

java - 执行 Observables 映射

java - 您使用哪种 JMS 实现?

regex - 如何将替换正则表达式作为命令行参数传递给 perl 脚本