为什么String.replaceAll()不能在这个String上工作?

时间:2010-04-29 05:42:58

标签: java regex string

    //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);

我正在尝试替换","之间的\"s,以便我可以使用String.split()后者。

但是上面的工作没有用,结果就是:

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

但是当我将src字符串更改为

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

效果很好

true  
9,10  
9#@10  
1239#@10123

字符串有什么问题???

1 个答案:

答案 0 :(得分:5)

()是正则表达式元字符;如果你想要按字面意思匹配它们,就需要进行转义。

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

你需要两个斜杠的原因是因为字符串文字中的\本身就是一个转义字符,所以"\\"是一个长度为1的字符串,包含一个斜杠。