【问题标题】:Java str.replaceAll() doesn't recognize \R as part of a character classJava string.replaceAll() 不将 \R 识别为字符类的一部分
【发布时间】:2019-06-28 20:56:27
【问题描述】:

我可以使用 str.replaceAll() 匹配 \\R,但是当我尝试匹配 [\\R] 时,出现异常:

线程“main”java.util.regex.PatternSyntaxException 中的异常:非法/不支持的转义序列

【问题讨论】:

  • 您希望\R 匹配什么字符类?
  • 哦,我刚刚了解到 - 从 Java 8 开始,它是一个换行符匹配器。我从来不知道。那么,OP,你有哪个版本的 Java?
  • \R 匹配任何 Unicode 换行序列
  • 嗯,确实如此。我今天学到了一些东西。 Any Unicode linebreak sequence, is equivalent to \u000D\u000A|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029]
  • 你试过[\\\\R]吗?

标签: java regex


【解决方案1】:

我建议替换\r?\n

str.replaceAll("\r?\n", "")

这涵盖了 Windows (\r\n) 和 Unix (\n) 行尾,应该涵盖您的用例。

【讨论】:

  • 它在 Java 8 中不起作用。请注意问题的开头。
  • @shmosel 是的,我是从一个不正确的评论中得到的。
  • 它在字符类中的工作方式不同。想一想,也许这就是问题所在。 \R 代表一个 sequence,而不是一组字符,因此它在字符类中不起作用。
猜你喜欢
  • 2018-11-20
  • 2017-07-03
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-25
  • 1970-01-01
相关资源
最近更新 更多