Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Java (http://www.velocityreviews.com/forums/f30-java.html)
-   -   String.replaceAll(String regex, String replacement) question (http://www.velocityreviews.com/forums/t129344-string-replaceall-string-regex-string-replacement-question.html)

Mladen Adamovic 12-03-2003 04:36 PM

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?




Alan Moore 12-04-2003 08:10 PM

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.

Roedy Green 12-04-2003 09:02 PM

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.

Mladen Adamovic 12-05-2003 04:20 PM

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.


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57