Dlaczego nie mogę używać \u000D i \u000a jako CR i LF w Javie?

Dlaczego nie mogę używać \u000d i \u000a jako CR i LF w Javie? To daje błąd podczas kompilacji kodu:

String x = "\u000A hello";//Error - Illegal escape character in string literal.
Author: MasterJoe, 2010-10-05

2 answers

Znaki specjalne Unicode są wstępnie przetwarzane przed uruchomieniem kompilatora. Dlatego, jeśli umieścisz \u000A w łańcuchu literalnym w taki sposób:

String someString = "foo\u000Abar";

Zostanie skompilowany dokładnie tak, jakbyś napisał:

String someString = "foo
bar";

Stick to \r (carriage return; 0x0D) and \n (line feed; 0x0A)

Bonus: zawsze możesz się z tym dobrze bawić, zwłaszcza biorąc pod uwagę ograniczenia większości zakreślaczy składni. Następnym razem spróbuj uruchomić ten kod:

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!");
        }
    }
}
 114
Author: Mark Peters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-05 17:47:36

Ponieważ mieści się w zakresie znaków sterujących Unicode

Czyli U+0000–U+001F i U+007F.

Znaki sterujące Unicode są używane do kontrolowania interpretacji lub wyświetlanie tekstu, ale same te znaki nie mają wizualnego lub reprezentacja przestrzenna.

Można ich uniknąć używając \ jak opisano w powyższej odpowiedzi przez @ Mark

FROM RFC:

2.5. Stringi

The reprezentacja łańcuchów to podobne do konwencji stosowanych w C rodzina języków programowania. A ciąg zaczyna się i kończy cudzysłowem marks. Wszystkie znaki Unicode mogą być umieszczone w cudzysłowie z wyjątkiem znaków, które muszą być Escape: cudzysłów, rewers solidus i znaki sterujące (U + 0000 do U + 001F).

Każdy znakMoże zostać uniknięty.

 2
Author: Matas Vaitkevicius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-20 11:47:45