Probleme de replaceAll() - Java - Programmation
Marsh Posté le 17-09-2002 à 15:33:45
parce que "\\" correspond à \
Marsh Posté le 17-09-2002 à 15:34:16
replaceAll prend des String en args?
Marsh Posté le 17-09-2002 à 17:04:27
Ben parce que les types "char" et "String" sont différents, tout simplement. Mais dans ton cas, cela suffit amplement à mon avis :
Code :
|
Maintenant, si tu veux vraiment pouvoir remplacer des chaînes de caractères de plus de 1 caractère de long, voici ce qu'il faut utiliser :
Code :
|
Marsh Posté le 18-09-2002 à 15:13:01
Tout d'abord, je voudrais vous remercier pour avoir pris le temps de me repondre.
Bon, je ne vois pas pourquoi vous me parlez de char et de string :
Voici les specifications de Sun :
Citation : replaceAll(String regex, String replacement) |
Donc ca devrait marcher, darklord tu dis que "\\" correspond à "\", c'est tout a fait mon intention, donc ma notation est juste.
Il existe une autre fonction qui utilise le type char en parametre :
Citation : replace(char oldChar, char newChar) |
Donc, j'en avais deduis que :
"test\\test".replaceAll("\\","/" )="test\\test".replace('\\','\'
Hors, lorsque j'utilise replaceAll, j'obtiens l'erreur ci-dessus....
Mon code est juste, je m'interroge seulement sur la provenance de cette erreur...
Marsh Posté le 18-09-2002 à 17:44:29
ben oui mais le replaceAll il attend une expression régulière en premier argument, pas simplement une chaine de caratère à remplacer ...
Marsh Posté le 18-09-2002 à 17:48:59
Au temps pour moi, quand j'ai répondu, j'avais confondu replace() et replaceAll() (je n'ai pas encore l'habitude de toutes les nouveautés du JDK1.4).
Il faudrait donc renommer ma fonction replaceAll() ci-dessus en replace() pour être cohérent.
benou> D'après le JavaDoc, le premier paramètre de String.replaceAll() est de type String, mais c'est un pattern d'expression régulière. Ainsi que ce même JavaDoc l'indique :
Citation : |
Marsh Posté le 18-09-2002 à 17:53:21
J'ai peut-être une idée : essaie de spécifier "\\\\" plutôt que simplement "\\" comme expression régulière.
Pourquoi ? Parce que le backslash doit être un caractère d'échappement pour Java et pour le moteur de traitement des regexps. Moralité, la chaîne Java "\\\\" est en fait une chaine de 2 caractères de longueur, composée de 2 caractères backslash. Cette chaine de caractères est ensuite interprétée par le moteur de traitement de regexp, qui va utiliser le premier backslash pour "escap-er" le caractère qui le suit.
Suis-je clair ?
Marsh Posté le 18-09-2002 à 17:56:20
BifaceMcLeOD a écrit a écrit : benou> D'après le JavaDoc, le premier paramètre de String.replaceAll() est de type String, mais c'est un pattern d'expression régulière. Ainsi que ce même JavaDoc l'indique :
|
ben c'est exactement ce que je viens de dire ...
Marsh Posté le 18-09-2002 à 18:01:10
il a l'air fatigué Biface ....
Marsh Posté le 18-09-2002 à 18:03:09
DarkLord a écrit a écrit : il a l'air fatigué Biface .... |
Tu dis ça parce que j'ai loupé ton post "parce que "\\" correspond à \"" ?
Ben......... ouais. Je l'avais loupé.
Donc, si je comprends bien... faut que je m'rentre ! Allez coucouche, panier !
Marsh Posté le 18-09-2002 à 18:09:12
BifaceMcLeOD a écrit a écrit : Oui, mais "\\" est bien une expression régulière, non ? |
ha ... peut-être je sais pas ... j'y connais vraiment rien en regexp
Marsh Posté le 18-09-2002 à 18:11:16
BifaceMcLeOD a écrit a écrit : Tu dis ça parce que j'ai loupé ton post "parce que "\\" correspond à \"" ? Ben......... ouais. Je l'avais loupé. Donc, si je comprends bien... faut que je m'rentre ! Allez coucouche, panier ! |
mais non
Marsh Posté le 18-09-2002 à 18:19:52
Si, si ! (ça s'appelle avoir du chien et être fatigué... )
Marsh Posté le 17-09-2002 à 15:30:28
Bonjour a tous,
J'ai un probleme avec la fonction replaceAll.
Je cherche a remplacer tout les "\" par des "/".
Voici donc mon programme :
Et hop :
Exception in thread "main" java.util.regex.PatternSyntaxException: Unexpected in
ternal error near index 1
\
La solution serait dont de simplement utiliser "replace(char,char)".....mais pourquoi ca ne marche pas avec des strings (alors que j'ai bien mis "\\" !!)