Maison  >  Article  >  Java  >  Pourquoi String.replaceAll(regex) remplace-t-il deux fois lors de l'utilisation de \".*\" ?

Pourquoi String.replaceAll(regex) remplace-t-il deux fois lors de l'utilisation de \".*\" ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-31 16:03:46603parcourir

Why does String.replaceAll(regex) replace twice when using

Pourquoi String.replaceAll(regex) remplace deux fois

Dans l'extrait de code :

System.out.println("test".replaceAll(".*", "a"));

l'expression régulière .* correspond à n’importe quel caractère, y compris zéro caractère. Cela signifie qu'il peut faire correspondre la chaîne entière deux fois :

  • Lors du premier passage, .* correspond à la chaîne entière et la remplace par "a".
  • Lors du deuxième passage, .* correspond à une chaîne vide à la fin de l'entrée (puisqu'elle peut correspondre à zéro caractère) et la remplace par un autre "a".

Ce comportement n'est pas considéré comme un bug dans le moteur d'expression régulière Java . Au lieu de cela, c'est une conséquence de la façon dont .* correspond à n'importe quel caractère.

Alternatives

Pour éviter ce comportement, vous pouvez utiliser les alternatives suivantes :

  • Utilisez .replaceFirst() pour remplacer uniquement la première occurrence :
"test".replaceFirst(".*", "a")
  • Utilisez .matches() pour vérifier si la chaîne entière correspond à l'expression régulière donnée :
System.out.println("test".matches(".*")); // Prints true
  • Utilisez une expression régulière plus spécifique, telle que . qui nécessite au moins un caractère :
System.out.println("test".replaceAll(".+", "a")); // Prints a

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn