java中的正则表达式:str.replace的错误(" \ s +","")

时间:2014-12-23 22:22:45

标签: java regex

为什么java(1.7)给出了以下行的错误?

String str2 = str.replace("\s+", " ");

错误:

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

据我所知,“\ s +”是一个有效的正则表达式。不是吗?

2 个答案:

答案 0 :(得分:6)

String.replace() will only replace literals,这是第一个问题。

第二个问题是,根据定义,\s不是Java字符串文字中的有效转义序列。

这意味着您想要的可能是"\\s+"

但即便如此,.replace()也不会将其视为正则表达式。您必须改为使用.replaceAll()

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

但还有另一个问题。您似乎经常使用它...因此,请改用Pattern

private static final Pattern SPACES = Pattern.compile("\\s+");

// In code...

SPACES.matcher(input).replaceAll("");

进一步说明:

  • 如果您想要的只是替换第一次出现,那么请使用.replaceFirst(); String拥有它,Pattern
  • 也拥有它
  • 当您.replace{First,All}()上的String时,会为每次调用重新编译新的Pattern 。如果您需要重复匹配,请使用Pattern

答案 1 :(得分:4)

It's a valid regular expression pattern,但\s不是有效String文字escape sequence。逃离\

String str2 = str.replace("\\s+", " ");

根据建议,String#replace(CharSequence, CharSequence)不会将您提供的参数视为正则表达式。所以即使你有编译的程序,它也不会做你想要它做的事情。查看String#replaceAll(String, String)