2010-04-29 6 views
3
//This source is a line read from a file 
    String src = "23570006,music,**,wu(),1,exam,\"Monday9,10(H2-301)\",1-10,score,"; 

    //This sohuld be from a matcher.group() when Pattern.compile("\".*?\"") 
    String group = "\"Monday9,10(H2-301)\""; 

    src = src.replaceAll("\"", ""); 
    group = group.replaceAll("\"", ""); 

    String replacement = group.replaceAll(",", "#@"); 
    System.out.println(src.contains(group)); 
    src = src.replaceAll(group, replacement); 
    System.out.println(group); 
    System.out.println(replacement); 
    System.out.println(src); 

Je suis en train de remplacer le "," entre \"s je peux utiliser String.split() celui-ci.Pourquoi String.replaceAll() ne fonctionne pas sur cette chaîne?

Mais ce qui précède juste ne fonctionne pas, le résultat est:

true 
Monday9,10(H2-301) 
Monday9#@10(H2-301) 
23570006,music,**,wu(),1,exam,Monday9,10(H2-301),1-10,score, 

mais quand je change la chaîne src à

String src = "123\"9,10\"123"; 
String group = "\"9,10\""; 

Il fonctionne bien

true 
9,10 
9#@10 
1239#@1

Quelle est la question avec la chaîne ???

+0

duplication possible de [Backslash problème avec String.replaceAll] (http://stackoverflow.com/questions/1701839/backslash-problem-with-string-replaceall) – McDowell

Répondre

5

( et ) sont métacaractère regex; ils doivent être échappés si vous voulez le faire correspondre littéralement.

String group = "\"Monday9,10\\(H2-301\\)\""; 
          ^ ^

La raison pour laquelle vous avez besoin de deux barres obliques est parce que \ dans une chaîne elle-même est littéralement un caractère d'échappement, de sorte "\\" est une chaîne de longueur 1 contenant une barre oblique.

Questions connexes