Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1241 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Probleme de replaceAll()

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de replaceAll()

n°215699
bartleby
Posté le 17-09-2002 à 15:30:28  profilanswer
 

Bonjour a tous,
 
J'ai un probleme avec la fonction replaceAll.
Je cherche a remplacer tout les "\" par des "/".
 
Voici donc mon programme :
 

Code :
  1. class test {
  2.    
  3.    
  4.     public static void main(String [] args) {
  5.  String chaine="salut\\les\\amis";
  6.  System.out.println(chaine);
  7.  System.out.println(chaine.replaceAll("\\","/" ));
  8.     }
  9. }


 
Et hop :
 

Citation :


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 "\\" !!)

mood
Publicité
Posté le 17-09-2002 à 15:30:28  profilanswer
 

n°215702
darklord
You're welcome
Posté le 17-09-2002 à 15:33:45  profilanswer
 

parce que "\\" correspond à \


---------------
Just because you feel good does not make you right
n°215703
darklord
You're welcome
Posté le 17-09-2002 à 15:34:16  profilanswer
 

replaceAll prend des String en args?


---------------
Just because you feel good does not make you right
n°215795
BifaceMcLe​OD
The HighGlandeur
Posté le 17-09-2002 à 17:04:27  profilanswer
 

Ben parce que les types "char" et "String" sont différents, tout simplement. Mais dans ton cas, cela suffit amplement à mon avis :

Code :
  1. System.out.println(chaine.replaceAll('\\', '/'));


 
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 :
  1. public static String replaceAll(String source, String oldString,
  2.                                 String newString) {
  3.   final int     oldStringLength = oldString.length();
  4.   StringBuffer  buffer          = null;
  5.   for (int index = source.length(); --index >= 0; ) {
  6.     if (source.regionMatches(index, oldString, 0, oldStringLength)) {
  7.       if (buffer == null) {
  8.         buffer = new StringBuffer(source);
  9.       }
  10.       buffer.replace(index, index + oldStringLength, newString);
  11.     }
  12.   }
  13.   return ((buffer == null) ? source : buffer.toString());
  14. }


Message édité par BifaceMcLeOD le 17-09-2002 à 17:06:19
n°216430
bartleby
Posté le 18-09-2002 à 15:13:01  profilanswer
 

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)  
          Replaces each substring of this string that matches the given regular expression with the given 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)  
          Returns a new string resulting from replacing all occurrences of oldChar in this string with 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...  

n°216624
benou
Posté le 18-09-2002 à 17:44:29  profilanswer
 

ben oui mais le replaceAll il attend une expression régulière en premier argument, pas simplement une chaine de caratère à remplacer ...

n°216626
BifaceMcLe​OD
The HighGlandeur
Posté le 18-09-2002 à 17:48:59  profilanswer
 

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).  :jap:  
 
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 :


An invocation of this method of the form :
    str.replaceAll(regex, repl)
yields exactly the same result as the expression :
    Pattern.compile(regex).matcher(str).replaceAll(repl)

n°216629
BifaceMcLe​OD
The HighGlandeur
Posté le 18-09-2002 à 17:53:21  profilanswer
 

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 ?  :pt1cable:

n°216631
benou
Posté le 18-09-2002 à 17:56:20  profilanswer
 

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 :

Citation :


An invocation of this method of the form :
    str.replaceAll(regex, repl)
yields exactly the same result as the expression :
    Pattern.compile(regex).matcher(str).replaceAll(repl)






 :heink: ben c'est exactement ce que je viens de dire ...

n°216633
darklord
You're welcome
Posté le 18-09-2002 à 18:01:10  profilanswer
 

il a l'air fatigué Biface .... :)


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 18-09-2002 à 18:01:10  profilanswer
 

n°216634
BifaceMcLe​OD
The HighGlandeur
Posté le 18-09-2002 à 18:01:12  profilanswer
 

Oui, mais "\\" est bien une expression régulière, non ?

n°216637
BifaceMcLe​OD
The HighGlandeur
Posté le 18-09-2002 à 18:03:09  profilanswer
 

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é.  :ouch:  :(  
Donc, si je comprends bien... faut que je m'rentre ! Allez coucouche, panier ! :pt1cable:  :D


Message édité par BifaceMcLeOD le 18-09-2002 à 18:04:19
n°216643
benou
Posté le 18-09-2002 à 18:09:12  profilanswer
 

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  :(

n°216644
darklord
You're welcome
Posté le 18-09-2002 à 18:11:16  profilanswer
 

BifaceMcLeOD a écrit a écrit :

 
Tu dis ça parce que j'ai loupé ton post "parce que "\\" correspond à \"" ?  :??:  
 
Ben......... ouais. Je l'avais loupé.  :ouch:  :(  
Donc, si je comprends bien... faut que je m'rentre ! Allez coucouche, panier ! :pt1cable:  :D




 
mais non ;)


---------------
Just because you feel good does not make you right
n°216650
BifaceMcLe​OD
The HighGlandeur
Posté le 18-09-2002 à 18:19:52  profilanswer
 

Si, si !  :D (ça s'appelle avoir du chien et être fatigué... :hap: )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Probleme de replaceAll()

 

Sujets relatifs
Problème d'affichage d'un caractère à l'écran[Java] Applet, reseau et repaint() : probleme
probleme d'include [youdontcare mon sauveur inside]probleme pour gerer le temps
formulaire d'upload + OVH = probleme ?JButton dans une Box : problème de dimensions
Après Netscape 4 c'est Opera qui me pose problème.Probleme d'écriture de requete en SQL :
problème avec variables chaines de caractèresProbleme de session sur free
Plus de sujets relatifs à : Probleme de replaceAll()


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR