Почему я не могу использовать \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).

Любой символ может быть экранирован.