6 votes

Java : Comprendre la méthode String replaceAll()

Je cherche à trouver la réponse à ce problème ici.

Tout d'abord,

blah[abc] = blah[abc].replaceAll("(.*) (.*)", "$2, $1");

Quelqu'un peut-il m'expliquer ce que sont les (.*), $2 et $1 ?

Deuxièmement, lorsque j'imbrique cela dans une instruction for afin d'inverser deux parties d'une chaîne, je suis frappé par une exception. Je me demandais si quelqu'un savait pourquoi.

Gracias

Edit : Voici l'erreur que je reçois

Exception dans le thread "main" java.lang.ArrayIndexOutOfBoundsException : 1 at ChangeNames.main(ChangeNames.java:21)

11voto

Sergey Points 827

(.*) - est un motif qui correspond à un nombre quelconque de caractères. Les parenthèses servent à indiquer qu'il s'agit d'un sous-modèle (pour référence ultérieure).

2 $ et 1 $ - sont des références arrière. Il s'agit des éléments correspondant à votre deuxième et premier sous-modèle.

En principe, replaceAll("(. ) (. )", "$2, $1") trouverait les caractères séparés par un espace, puis ajouterait une virgule avant l'espace, en plus de retourner les parties. Par exemple :

a b => b, a
Hello world => Hellw, oorld

Je ne suis pas sûr de l'imbrication... Pouvez-vous afficher le code que vous exécutez ?

-1voto

Ankur Points 492

Votre expression régulière "(.)(.)" sera de ce type : "(x)(y)" ; elle sera remplacée par "$2,$1.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X