web-dev-qa-db-fra.com

Java ne fonctionne pas avec regex \ s, dit: séquence d'échappement invalide

Je veux remplacer tous les caractères d'espaces dans une chaîne par un "+" et tous les "ß" par "ss" ... cela fonctionne bien pour "ß", mais Eclipse ne me laisse pas utiliser\s pour un espace. J'ai essayé "\ t" à la place, mais cela ne fonctionne pas non plus. J'obtiens l'erreur suivante:

Séquence d'échappement non valide (les séquences valides sont\b\t\n\f\r\"\ '\)

voici mon code:

try {
    String temp1 = from.getText().toString();
    start_from  = temp1.replaceAll("ß", "ss");
    start_from  = start_from.replaceAll("\s", "+");
}

pourquoi ça ne marche pas? est-ce un problème avec Android, Eclipse ou quoi?

merci d'avance!

38
MJB

Vous devez échapper à la barre oblique

start_from  = start_from.replaceAll("\\s", "+");
60
Rob Di Marco

Le problème est que \ est un caractère d'échappement dans Java ainsi que motifs regex. Si vous voulez faire correspondre le motif regex \n, disons, et vous iriez de l'avant et écririez

replaceAll("\n", "+");

Le modèle d'expression régulière ne finirait pas par être \n: ce serait en fait une véritable nouvelle ligne, puisque c'est ce que "\n" signifie en Java. Si vous souhaitez que le motif contienne une barre oblique inverse, vous devez vous assurer que vous échappez à cette barre oblique inverse afin qu'elle ne soit pas traitée comme un caractère spécial dans la chaîne.

replaceAll("\\s", "+");
9
David Hedlund

Vous pouvez utiliser la classe Java.util.regex.Pattern et utiliser quelque chose comme p = Pattern.compile("\s"); en combinaison avec p.matcher(start_from).replaceAll("+"). Alternativement, échappez simplement à votre métacaractère "\ s" en tant que "\\ s".

1
Dustin