-
illegal escape character
Bonjour,
J'ai la déclaration suivante qui me pose des problèmes:
public static String mystr = "\.toto";
L'erreur de compilation est sur le "\.", avec le "." qui est un "illegal escape character".
En fait comme je sais que le "." est un metacaractère est que je voudrais qu'il soit considéré comme un caractère normal, j'ai donc mis le "\" devant. Comment ça se fait qu'il ne comprends pas ça?
Comment je dois faire pour lui faire comprendre ".toto" alors?
Merci!
-
".toto" passe très bien dans une String normale. C'est lorsque tu utilises les expressions régulières que tu dois rajouter les caractères d'échappement.
Il ne devrait pas y avoir de problème pour comprendre ".toto". Dans les String de base, Java ne comprends que \n, \t, etc. comme caractères d'échapppement.
-
Salut yli_ren,
Ce que dis Rayndell est tout a fait juste, mais je voulais ajouter une petite precision qui pourrait peut etre t'etre utile:
Si tu veux faire un monString.split() sur le " . " tu dois le soumettre comme ceci: monString.split("\\.") (voir utilisation du regex)
La ou ca devient tordu c'est pour faire un split sur le caractere "' \ ", tu dois en passer quatre: monString.split("\\\\"):
http://java.developpez.com/faq/java/...RING_antislash
Bon courage,
Cordialement,
Tif
-
Merci pour vos réponses.
En fait, java connait la string ".toto" sauf que ce que je voudrais faire est MyString.replaceAll(".toto", ""). Dans ce cas, ".toto" a été interpreté comme une expression reculière.
Par exemple, si MyString = "tata.toto", MyString.replaceAll(".toto", "") va donner "tata". ça, d'acord. Mais si MyString = "tata_toto", je ne voudrais absoluement pas que MyString.replaceAll(".toto", "") devienne "tata" aussi! Alors que c'est ce qui s'est passé. C'est pour ça que j'ai pensé à utiliser "\.toto". Mais visiblement le compilateur n'autorise pas "\.", que faire?...:cry:
-
il faut utilisé aussi un caractère d'écapement pour le \
MyString.replaceAll("\\.toto","").
++
Loïc
-
Salut,
Il faut doubler le \ :
Code:
myString.replaceAll("\\.toto", "");
:faq: Pourquoi dois-je doubler/quadrupler le caractère anti-slash ('\') ?
Mais le plus simple serait d'utiliser Pattern.quote() pour protéger toutes la chaine :
Code:
myString.replaceAll(Pattern.quote(".toto"), "");
:faq: Comment remplacer une sous-chaîne en la reportant dans la chaîne de remplacement ?
a++
-
grrr, je suis vraiment trop conne...
En fait j'ai déjà essayé de faire "\\.", mais comme j'ai déclaré ce string comme un variable global qui est utilisé à plusieurs endroits, et que ça a cassé ailleurs du coup je ne suis pas aller voir plus loins.
Bref, c'était bien ça la solution. Merci!