/ / String.replaceAll () avec [d] * ajoute la chaîne de remplacement entre les caractères, pourquoi? - java, regex

String.replaceAll () avec [d] * ajoute la chaîne de remplacement entre les caractères, pourquoi? - Java, regex

J'essaie depuis des heures maintenant d'obtenir une expression régulièrequi correspondra à une quantité inconnue de nombres consécutifs. Je crois que [0-9] * ou [d] * devrait être ce que je veux encore quand j'utilise Java "s String.replaceAll, il ajoute ma chaîne de remplacement dans des endroits qui ne devraient pas" correspondre à l'expression régulière.

Par exemple: J'ai une chaîne d'entrée de "Ceci est le problème de my99String" Si ma chaîne de remplacement est "~"

Quand je lance ça

myString.replaceAll("[\d]*", "~" )

ou

myString.replaceAll("[0-9]*", "~" )

ma chaîne de retour est "~ T ~ h ~ i ~ s ~ ~ i ~ s ~ ~ m ~ y ~~ S ~ t ~ r ~ i ~ n ~ g ~ ~ p ~ r ~ o ~ b ~ l ~ e ~ m ~ "

Comme vous pouvez le voir, les chiffres ont été remplacés, mais pourquoi ajoute-t-il également ma chaîne de remplacement entre les caractères.

Je veux que ça ressemble à "C'est mon problème de chaîne"

Qu'est-ce que je fais mal et pourquoi la correspondance java est-elle comme ça?

Réponses:

9 pour la réponse № 1

\d* correspond à 0 ou plusieurs chiffres et correspond donc même à une chaîne vide. Et vous avez une chaîne vide avant chaque caractère de votre chaîne. Donc, pour chacun d'eux, il le remplace par ~, d'où le résultat.

Essayez d'utiliser \d+ au lieu. Et vous n'avez pas besoin d'inclure \d dans la classe de caractère.


1 pour la réponse № 2
[\d]*

allumettes zéro ou plus (tel que défini par *). Par conséquent, vous obtenez des correspondances tout au long de vos chaînes. Si vous utilisez

[\d]+

qui "correspondra à 1 ou plusieurs numéros.

De Le document:

Greedy quantifiers
X?  X, once or not at all
X*  X, zero or more times
X+  X, one or more times