donné ce code: pourquoi remplacé code> contient la chaîne hihi code> au lieu de hi code> J'aurais deviné? Il semble que cela ait quelque chose à voir avec le début d'une ligne depuis l'utilisation du modèle ^. * Code> rendements hi code>, mais je n'ai pas la raison pour cela. < / p> p>
4 Réponses :
Regardez le remplacementAll Javadoc: remplace chaque sous-chaîne de cette chaîne correspondant à l'expression régulière donnée avec le remplacement donné.
Cela correspond à deux sous-chaînes: "" et "A".
Vous pouvez voir cela en testant qui entraîne une seule "HI" étant imprimée p> p>
Dans "A", il y a deux positions (entre les lettres de manière à dire): 0 et 1. à 0 "A" correspond à 1 "" matchs "".
@Joopeggen De toute façon, il est contre-intuitif. Si . * Code> est gourmand, il devrait "manger" de la chaîne entière y compris b> la chaîne vide à la fin et renvoyer une correspondance une fois.
Deux chaînes vides "a" .replaceall ("", "hi") == hiahi code>
@Adamdyga "gourmand" (chaîne la plus longue correspondante) à la position 0, mais en position 1, il commence à faire correspondre à nouveau.
i pense em> c'est parce que . * code> correspond à la chaîne entière, puis correspond à la chaîne vide à la fin de la chaîne. Bien sûr, ^. * Code> ne correspond pas à la chaîne vide à la fin de "A", de sorte que vous vous retrouvez avec un seul "salut". P>
La méthode de recherche de la classe de correspondance trouve "A" et une chaîne vide après le "A", donc il y a 2 remplacements. P>
La méthode de remplacement code> prend la réégalité et le paramètre de remplacement similaires ( En savoir plus ): - String replaced = "A".replaceAll(".*", "HI");
Vous pouvez utiliser
. + Code> pour empêcher la chaîne vide ("" code>) à correspondre.