Почему я не могу использовать \u000D и\u000A как CR и LF в Java?
Почему я не могу использовать \u000D и\u000A как CR и LF в Java? Это дает ошибку при компиляции кода:
illegal line end in character literal
Ответы
Ответ 1
Экземпляры Unicode предварительно обрабатываются перед запуском компилятора. Поэтому, если вы помещаете \u000A
в строковый литерал следующим образом:
String someString = "foo\u000Abar";
Он будет скомпилирован точно так, как если бы вы написали:
String someString = "foo
bar";
Придерживайтесь \r
(возврат каретки, 0x0D
) и \n
(строка, 0x0A
)
Бонус: Вы всегда можете получать удовольствие от этого, особенно учитывая ограничения для большинства синтаксических маркеров. В следующий раз, когда у вас есть секунда, попробуйте запустить этот код:
public class FalseIsTrue {
public static void main(String[] args) {
if ( false == true ) { //these characters are magic: \u000a\u007d\u007b
System.out.println("false is true!");
}
}
}
Ответ 2
Поскольку он попадает в диапазон символы управления Unicode
Это U+0000–U+001F
и U+007F
.
Управляющие символы Юникода используются для управления интерпретацией или отображение текста, но сами эти символы не имеют визуального или пространственное представление.
Они могут быть экранированы с помощью \
, как описано в приведенном выше ответе @Mark
FROM RFC:
2.5. Строки
Представление строк является аналогичные соглашениям, используемым в C семейство языков программирования. строка начинается и заканчивается цитатой Метки. Все символы Юникода могут быть помещены в кавычки за исключением символов, которые должны быть escaped: кавычка, обратная solidus и управляющие символы(U + 0000 через U + 001F).
Любой символ может быть экранирован.