【问题标题】:Java doesn't work with regex \s, says: invalid escape sequenceJava 不适用于正则表达式 \s,说:无效的转义序列
【发布时间】:2011-02-13 13:33:28
【问题描述】:

我想用“+”替换字符串中的所有空白字符,用“ss”替换所有“ß”...它适用于“ß”,但不知何故 eclipse 不允许我使用 \s一个空格..我尝试了“\t”,但它也不起作用..我收到以下错误:

无效的转义序列(有效的 是 \b \t \n \f \r \" \' \)

这是我的代码:

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

为什么它不起作用?是android、eclipse还是什么的问题?

提前致谢!

【问题讨论】:

  • 我很惊讶您甚至可以在字符串文字中编译 \s。在字符串文字中添加 \t 将创建一个包含制表符的正则表达式,而不是其中包含 \t 的正则表达式,因为您需要在字符串文字中使用 \\t。
  • 我无法编译它,.. eclipse 给了我这个我发布的错误信息。我只是想让你知道我想要做什么。

标签: java android regex whitespace


【解决方案1】:

你需要转义斜线

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

【讨论】:

  • 谢谢!很棒的网站! :-) “你不能在 11 分钟内接受答案” .... ;-)
【解决方案2】:

问题在于\ 是java 以及 正则表达式模式中的转义字符。如果你想匹配正则表达式模式\n,你会继续写

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

正则表达式模式最终不会是\n:它将成为一个实际的换行符,因为这就是"\n" 在Java 中的含义。如果您希望 pattern 包含反斜杠,则需要确保对该反斜杠进行转义,以便它不会被视为字符串中的特殊字符。

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

【讨论】:

    【解决方案3】:

    您可以使用 java.util.regex.Pattern 类并将p = Pattern.compile("\s");p.matcher(start_from).replaceAll("+") 结合使用。或者,只需将“\s”元字符转义为“\\s”。

    【讨论】:

    • jepp 我已经在我的代码的另一部分使用了一个模式,但是,我认为在这种情况下使用 replaceAll(..) 会更容易,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2021-11-29
    • 2015-11-05
    相关资源
    最近更新 更多