Проблема unclosed string literal
заключается в том, что последовательности \uXXXX
разрешены до lexing .Поэтому
boolean b = "\u000D".matches("\\cM");
становится
boolean b = "
".matches("\\cM");
, что является недействительным кодом Java.(да, это также означает, что вы могли бы написать String foo = \u0022\u0021\u0022;
и правильно скомпилировать.)
Если вы пишете вместо
boolean b = "\r".matches("\\cM"); // \r == \u000D
, тогда код работает и возвращает true
.