2008-11-05 11 views

Répondre

15

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")); 
+0

Il faut noter que ceci * ne * fonctionne que par paires, donc 777 devient 77 ((77) 7) et 7777 devient 77 ((77) (77)). Pour remplacer toutes les répétitions, utilisez/(\\ d) \\ 1 +/ –

0

en utilisant une expression régulière:

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

qui correspondent exactement deux répétitions.

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

Ce n'est pas Java ... mais l'idée est saine. –

+0

lol je vois que maintenant ... – Jake

+0

Vous pourriez utiliser cette expression rationnelle en combinaison avec les classes java.util.regex.Pattern et java.util.regex.Matcher. – Ruben

0

Ceci est une expression régulière mathing deux chiffres répétés (x étant le chiffre)

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

j'ai finalement fait moi-même. Ceux qui sont à la recherche de la solution, voici comment je l'ai fait:

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); 
    } 
} 

Encore plus simple:

**word = word.replaceAll("(\\d)\\1", "$1");** 
+0

Oui, mais encore une fois, un simple "77433211" .replaceAll ("(\\ d) \\ 1", "$ 1"); est assez;) – VonC

+0

Oui qui l'a fait aussi, j'ai juste oublié d'assigner la valeur de retour et j'ai pensé que cela ne fonctionne pas. Merci VonC pour votre aide. Quelques votes pour vous :-) – ashokgelal

Questions connexes