String.replaceAll(String regex, String replacement) question

Discussion in 'Java' started by Mladen Adamovic, Dec 3, 2003.

  1. 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?
     
    Mladen Adamovic, Dec 3, 2003
    #1
    1. Advertising

  2. Mladen Adamovic

    Alan Moore Guest

    On Thu, 4 Dec 2003 17:40:10 +0100, "Mladen Adamovic" <>
    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.
     
    Alan Moore, Dec 4, 2003
    #2
    1. Advertising

  3. Mladen Adamovic

    Roedy Green Guest

    On Wed, 3 Dec 2003 17:36:00 +0100, "Mladen Adamovic" <>
    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.
     
    Roedy Green, Dec 4, 2003
    #3
  4. > 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)
     
    Mladen Adamovic, Dec 5, 2003
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Tony
    Replies:
    2
    Views:
    579
    Alan Moore
    Dec 4, 2003
  2. Mladen Adamovic
    Replies:
    0
    Views:
    745
    Mladen Adamovic
    Dec 4, 2003
  3. Replies:
    7
    Views:
    21,949
    Chris
    Apr 19, 2006
  4. Replies:
    6
    Views:
    49,311
    Bernd Klier
    May 29, 2006
  5. NickName

    Reg: replaceAll new question

    NickName, Oct 19, 2006, in forum: Java
    Replies:
    0
    Views:
    360
    NickName
    Oct 19, 2006
Loading...

Share This Page