I tried to replace all " with \".
s=s.replaceAll("[\"]","\\\"");
but it does nothing!! String remains the same!!!
I tried then
s=s.replaceAll("[\Q"\E]","\Q\"\E")
but I got five sintax error?!?!?!?
I'm using JDK 1.4.2_01.
What's wrong?
P.S. It was a typing error in first message I posted about this.
Actually, your first version does do something: it replaces every
double-quote with a double-quote. The first argument is okay
(although you don't need the square brackets), but the second argument
is short a couple of backslashes. See, first the Java compiler
processes the arguments, turning them into ["] and \". Then the
Matcher looks at that single backslash in the second argument, decides
it's only there to escape the double-quote, and throws it away. So
you need four backslashes to get one into the output, and one more to
escape the double-quote:
s = s.replaceAll("\"", "\\\\\"");
The \Q...\E construct won't help here, because both " and \ are
special to String literals, so they have to be escaped anyway. And
putting it inside a character class (square brackets), is at least
redundant, if not an error. And, most importantly, you only used one
backslash. If you want the Pattern compiler to "see" a single
backslash, you have to put two in the regex string. Except for
escaping double-quotes, backslashes should *always* appear in pairs in
a regex string, and you have to use four of them to actually match a
backslash.
Oh, and \Q...\E is totally meaningless in the replacement string.