Why can't I use \u000D and \u000A as CR and LF in Java?

后端 未结 2 1374
情书的邮戳
情书的邮戳 2020-11-27 03:33

Why can\'t I use \\u000D and \\u000A as CR and LF in Java? It\'s giving an error when I compile the code:

String x = "\\u000A hello";//Error - Illeg         


        
相关标签:
2条回答
  • 2020-11-27 03:36

    Unicode escapes are pre-processed before the compiler is run. Therefore, if you put \u000A in a String literal like this:

    String someString = "foo\u000Abar";
    

    It will be compiled exactly as if you wrote:

    String someString = "foo
    bar";
    

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

    Bonus: You can always have fun with this, especially given the limitations on most syntax highlighters. Next time you've got a sec, try running this code:

    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!");
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-27 03:45

    Because it falls within the range of Unicode Control characters

    Which is U+0000–U+001F and U+007F.

    Unicode control characters are used to control the interpretation or display of text, but these characters themselves have no visual or spatial representation.

    They can be escaped by using \ like described in above answer by @Mark

    FROM RFC:

    2.5. Strings

    The representation of strings is similar to conventions used in the C family of programming languages. A string begins and ends with quotation marks. All Unicode characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark, reverse solidus, and the control characters (U+0000 through U+001F).

    Any character may be escaped.

    0 讨论(0)
提交回复
热议问题