![]() |
String.replaceAll(String regex, String replacement) question
I tried to replace " with \".
s.replaceAll("[\"]",\\\""); but it does nothing!! I tried then s.replaceAll("[\Q"\E]","\Q\"\E") but I got five sintax error?!?!?!? I'm using JDK 1.4.2_01. What's wrong? |
Re: String.replaceAll(String regex, String replacement) question
On Thu, 4 Dec 2003 17:40:10 +0100, "Mladen Adamovic" <adamm@blic.net>
wrote: >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. |
Re: String.replaceAll(String regex, String replacement) question
On Wed, 3 Dec 2003 17:36:00 +0100, "Mladen Adamovic" <adamm@blic.net>
wrote or quoted : >s.replaceAll("[\"]",\\\""); >but it does nothing!! You do realize this has no effect on s, just creates a new string result. -- Canadian Mind Products, Roedy Green. Coaching, problem solving, economical contract programming. See http://mindprod.com/jgloss/jgloss.html for The Java Glossary. |
Re: String.replaceAll(String regex, String replacement) question
> 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. Thanks for help Alan. I really think that escape sequences shouldn't be processed TWICE when program call String.replaceAll(String regex, String replacement) |
| All times are GMT. The time now is 05:56 PM. |
Powered by vBulletin®. Copyright ©2000 - 2013, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.