为什么我不能在Java中使用\ u000D和\ u000A作为CR和LF?

为什么我不能在Java中使用\ u000D和\ u000A作为CR和LF? 编译代码时发生错误:

illegal line end in character literal 

在编译器运行之前,Unicode转义是预处理的。 因此,如果您将\u000A放入\u000A的string文字中:

 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!"); } } } 

因为它属于Unicode控制字符的范围

这是U+0000–U+001FU+007F

Unicode控制字符用于控制文本的解释或显示,但这些字符本身没有可视或空间表示。

像@Mark上面的回答中所述,他们可以通过使用\来逃脱

FROM RFC :

2.5。 string

string的表示类似于C系列编程语言中使用的约定。 一个string以引号开头和结尾。 除了必须转义的字符:引号,反转斜线和控制字符 (U + 0000到U + 001F)之外,所有Unicode字符都可以放在引号内。

任何angular色都可能被转义。