我想计算以下内容:
boolean b = "\u000D".matches("\\cM");
但是编译器给我:
unclosed string literal
illegal character: \92
illegal character: \92
unclosed string literal
not a statement
为什么?该文字不是有效的 unicode Ctrl-m unicode 代码???
最佳答案
unclosed string literal
的问题是因为the \uXXXX
sequences are resolved before lexing .所以
boolean b = "\u000D".matches("\\cM");
成为
boolean b = "
".matches("\\cM");
这是无效的 Java 代码。 (是的,这也意味着您可以编写 String foo =\u0022\u0021\u0022;
并正确编译。)
如果你改写
boolean b = "\r".matches("\\cM"); // \r == \u000D
然后代码运行并返回 true
。
关于java - Ctrl-M 的正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193622/