views:

591

answers:

4

hi,
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  A: 

You need to escape the slash

                start_from  = start_from.replaceAll("\\s", "+");
Rob Di Marco
thank you! awesome website! :-) "You cannot accept an answer in 11 minutes" .... ;-)
Jayomat
+5  A: 

The \ is an escape character in String. You need to escape it with another \ to actually represent it.

start_from  = start_from.replaceAll("\\s", "+");

By the way, if I guess right what you're trying to do, are you aware of java.net.URLEncoder?

BalusC
thank you! awesome website! :-) "You cannot accept an answer in 11 minutes" .... ;-)no I wasn't aware of that! good to know! thx
Jayomat
+3  A: 

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", "+");
David Hedlund
thank you too! :-)
Jayomat
+1  A: 

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".

Dustin
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!
Jayomat
`Pattern.compile("\s")` is still a Java syntax error.
Alan Moore