2008-11-05 69 views

回答

15

可能是一个replaceAll("(\\d)\\1+", "$1")

  • $起着替换字符串中的特殊作用,指定第一个捕获组。
  • +允许更换为许多相同数量尽可能(\\d)\\1只能通过对替换它们:777xx =>77xx(谢谢你Ben Doom的言论)

所以:

System.out.println("77433211".replaceAll("(\\d)\\1+", "$1")); 

将返回

74321 

String java.lang.String.replaceAll(String regex, String replacement) 

将此字符串的每个子字符串替换为给定替换的给定正则表达式。

形式str.replaceAll(regex, repl)的该方法的调用产生完全相同的结果作为表达式

java.util.regex.Pattern.compile(regex).matcher(str).replaceAll(repl) 

警告String.replaceAll()函数不修改它在其上施加的字符串。它返回一个修改后的字符串(或内容相同的一个新的String,如果模式不匹配任何东西)

所以,你需要影响replaceAll()调用本身的结果,以实际更新与正则表达式改变你的字符串。

String aString = "77433211" 
aString = aString.replaceAll("(\\d)\\1+", "$1")); 
0

var myString='123345' 
myString.replace(/([0-9])\1/g,'$1') 

,将完全匹配重复2次。

'123334'.replace(/([0-9])\1+/g,'$1') 
+0

这不是Java ......但这个想法是合理的。 – 2008-11-05 07:20:46

+0

大声笑我现在看到了...... – Jake 2008-11-05 07:22:37

+0

您可以将此正则表达式与java.util.regex.Pattern和java.util.regex.Matcher类结合使用。 – Ruben 2008-11-05 07:25:29

0

这是一个正则表达式mathing两个重复数字(x是数字)

[x]{2}(?!=[x]) 
5

我终于做到了自己。这些谁正在寻找解决方案,这是我做的:

import java.util.regex.*; 

public class RepetingDigits{ 
    public static void main(String[] args) { 
     String word = "77433211"; 
     Pattern pattern = Pattern.compile("(\\d)\\1"); 
     Matcher matcher = pattern.matcher(word); 
     word = matcher.replaceAll("$1"); 
     System.out.println(word); 
    } 
} 

更简单:

**word = word.replaceAll("(\\d)\\1", "$1");** 
相关问题