Probablement un replaceAll("(\\d)\\1+", "$1")
$
joue un rôle particulier dans une chaîne remplaçant, désignant le premier groupe de capture.
+
permet de remplacer le plus grand nombre nombre identique que possible (\\d)\\1
ne ferait que les remplacer par paire: 777xx
=>77xx
(merci Ben Doom pour la remarque)
Alors:
System.out.println("77433211".replaceAll("(\\d)\\1+", "$1"));
retournera
74321
String java.lang.String.replaceAll(String regex, String replacement)
Remplace chaque sous-chaîne de cette chaîne qui correspond à l'expression régulière donnée par le remplacement donné.
une invocation de cette méthode de la forme str.replaceAll(regex, repl)
cède exactement le même résultat que l'expression
java.util.regex.Pattern.compile(regex).matcher(str).replaceAll(repl)
avertissement: String.replaceAll()
fonction ne modifie pas la chaîne sur laquelle il est appliqué. Il retourne une chaîne modifiée (ou une nouvelle chaîne avec le même contenu si le motif ne correspond pas à quoi que ce soit)
Vous avez donc besoin d'affecter le résultat d'un appel replaceAll()
à se mettre à jour réellement votre chaîne avec les changements de regexp .
String aString = "77433211"
aString = aString.replaceAll("(\\d)\\1+", "$1"));
http: // stackoverflow.com/questions/106067/regular-expression-to-replace-two-or-more-consecutives-characters-by-only-one Cas général connexe –