首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java中的Regex :str.replace错误(“\s+”,“")

java中的Regex :str.replace错误(“\s+”,“")
EN

Stack Overflow用户
提问于 2014-12-23 22:22:45
回答 2查看 1.6K关注 0票数 0

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

代码语言:javascript
运行
复制
String str2 = str.replace("\s+", " ");

错误:

代码语言:javascript
运行
复制
Invalid escape sequence (valid ones are  \b  \t  \n  \f  \r  \"  \'  \\ )   

据我所知,"\s+“是一个有效的正则表达式。难到不是么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-23 22:30:14

只会取代文字,这是第一个问题。

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

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

但即使如此,.replace()也不会把它当作准则。您必须使用.replaceAll()来代替:

代码语言:javascript
运行
复制
s.replaceAll("\\s+", "");

但还有另一个问题。你好像经常用它..。因此,使用Pattern代替:

代码语言:javascript
运行
复制
private static final Pattern SPACES = Pattern.compile("\\s+");

// In code...

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

进一步注释:

  • 如果您只想替换第一个事件,那么使用.replaceFirst()String有它,Pattern也有
  • 当您在.replace{First,All}()上使用String时,每次调用都会重新编译一个新的Pattern。如果您必须进行重复匹配,请使用Pattern
票数 6
EN

Stack Overflow用户

发布于 2014-12-23 22:23:26

这是一个有效的正则表达式模式,但\s不是有效的String文字逃逸序列。逃离\

代码语言:javascript
运行
复制
String str2 = str.replace("\\s+", " ");

正如建议的那样,String#replace(CharSequence, CharSequence)并不认为您提供的参数是正则表达式。所以,即使你要编译这个程序,它也不会做你想要它做的事情。看看String#replaceAll(String, String)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27628884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档