регулярное выражение с Ctrl-M - PullRequest
1 голос
/ 07 июля 2010

Я хочу сделать следующее:

boolean b = "\u000D".matches("\\cM");

но компилятор выдаст мне:

unclosed string literal
illegal character: \92
illegal character: \92
unclosed string literal
not a statement

почему? этот литерал не является допустимым кодом Unicode Ctrl-m Unicode ???

Ответы [ 3 ]

3 голосов
/ 07 июля 2010

Проблема 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.

1 голос
/ 07 июля 2010

Ха-ха!

Это ловушка!

Java-процессы Юникод экранирует до интерпретации. Таким образом, он преобразует ваш код в:

boolean b = "
".matches("\\cM"); 

.. и так, это определенно ошибка - незавершенная строка и т. Д.

0 голосов
/ 07 сентября 2017

Это может быть не связано, но я хотел удалить Ctrl + m из поля в базе данных (Vertica).

Я использовал функцию ниже, и она работаладля меня.

REGEXP_REPLACE(<column_name>,'[[:cntrl:]]')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...