为什么java(1.7)给出了以下行的错误?
String str2 = str.replace("\s+", " ");
错误:
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
据我所知,“\ s +”是一个有效的正则表达式。不是吗?
答案 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)
。