48

I want to replace all whitespace characters in a string with a "+" and all "ß" with "ss"... it works well for "ß", but somehow eclipse won't let me use \s for a whitespace.. I tried "\t" instead, but it doesn't work either.. I get the following error:

Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \ )

this is my code:

try {
    String temp1 = from.getText().toString();
    start_from  = temp1.replaceAll("ß", "ss");
    start_from  = start_from.replaceAll("\s", "+");
}

why doesn't it work? is it a problem with android, eclipse or what?

thanks in advance!

2
  • 2
    I'm surprised that you can even compile \s in a string literal. Adding \t in a string literal would create a regular expression containing a tab character, rather than the regular expression with \t in it, for that you need \\t in the string literal. Commented Apr 28, 2010 at 21:35
  • I couldn't compile it,.. eclipse gave me this error message I posted. I just wanted to let you know what I was trying to do. Commented Apr 28, 2010 at 22:20

3 Answers 3

74

You need to escape the slash

start_from  = start_from.replaceAll("\\s", "+");
Sign up to request clarification or add additional context in comments.

1 Comment

thank you! awesome website! :-) "You cannot accept an answer in 11 minutes" .... ;-)
12

The problem is that \ is an escape character in java as well as regex patterns. If you want to match the regex pattern \n, say, and you'd go ahead and write

replaceAll("\n", "+");

The regex pattern would not end up being \n: it would en up being an actual newline, since that's what "\n" means in Java. If you want the pattern to contain a backslash, you'll need to make sure you escape that backslash, so that it is not treated as a special character within the string.

replaceAll("\\s", "+");

Comments

1

You can use the java.util.regex.Pattern class and use something like p = Pattern.compile("\s"); in combination with p.matcher(start_from).replaceAll("+"). Alternatively, just escape your "\s" metacharacter as "\\s".

1 Comment

jepp I already used a pattern in another part of my code, however, I thought it would be easier in this case to just use replaceAll(..) thank you!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.