Remplacer une sous-chaîne (replaceAll) solution de contournement
Je suis en train de remplacer une sous-chaîne qui contient le caractère "$". Je serais heureux d'entendre pourquoi ça ne fonctionne de cette manière, et comment cela pourrait fonctionner.
Grâce,
user_unknown
public class replaceall {
public static void main(String args[]) {
String s1= "$foo - bar - bla";
System.out.println("Original string:\n"+s1);
String s2 = s1.replaceAll("bar", "this works");
System.out.println("new String:\n"+s2);
String s3 = s2.replaceAll("$foo", "damn");
System.out.println("new String:\n"+s3);
}
}
- Et qu'est-ce imprimer?
$foo - this works - bla
? - double possible de barre Oblique inverse problème avec la Chaîne.replaceAll
Vous devez vous connecter pour publier un commentaire.
Java
.replaceAll
implicitement utilise les Regex pour remplacer. Cela signifie que,$foo
est interprété comme une expression régulière pattern, et$
est particulier dans la regex (qui signifie "fin de chaîne").Vous avez besoin pour échapper à la
$
commesi la cible d'une variable, utilisez
Pattern.quote
de s'échapper tous les caractères spéciaux sur Java ≥1.5, et si le remplacement est également une variable, utilisezMatcher.quoteReplacement
.Sur Java ≥1.5, vous pouvez utiliser
.remplacez
au lieu.Résultat: http://www.ideone.com/Jm2c4
replaceAll()
peut-être besoin de s'échapper en trop (avecPattern.quoteReplacement()
).Si vous n'avez pas besoin de Regex fonctionnalité, ne pas utiliser les regex version.
Utilisation
String.replace(str, str)
à la place:Référence:
IIRC, replaceAll prendre une regex : Essayez d'échapper à l' $, de cette façon :