Monday, April 25, 2011

How to replace a plus character using Java's String.replaceAll method

What's the correct regex for a plus character (+) as the first argument (i.e. the string to replace) to Java's replaceAll method in the String class? I can't get the syntax right.

From stackoverflow
  • You'll need to escape the + with a \ and because \ is itself a special character in Java strings you'll need to escape it with another \.

    So your regex string will be defined as "\\+" in Java code.

    I.e. this example:

    String test = "ABCD+EFGH";
    test = test.replaceAll("\\+", "-");
    System.out.println(test);
    
  • You need to escape the + for the regular expression, using \.

    However, Java uses a String parameter to construct regular expressions, which uses \ for its own escape sequences. So you have to escape the \ itself:

    "\\+"
    
    Aaron Maenpaa : I have the bad habit of using '/'s when building the regex and then running .replace('/', '\\'), so that I don't have to type "\\\\" to match a literal backslash.
    gustafc : If you want to replace a fixed string, Pattern.quote(String) is a very nice friend.
  • when in doubt, let java do the work for you:

    myStr.replaceAll(Pattern.quote("+"), replaceStr);
    
    John Topley : That's a nice technique - thanks.
  • If you want a simple string find-and-replace (i.e. you don't need regex), it may be simpler to use the StringUtils from Apache Commons, which would allow you to write:

    mystr = StringUtils.replace(mystr, "+", "plus");
    
    Gerhard Dinhof : thx for pointing to this. helped me remembering using this non-regex solution in simple cases.
    Vinze : isn't that equivalent to using mystr.replace("+", "plus") ? replace does not use regex (while replaceAll does).

0 comments:

Post a Comment

Note: Only a member of this blog may post a comment.