为什么我不能在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+001F
和U+007F
。
Unicode控制字符用于控制文本的解释或显示,但这些字符本身没有可视或空间表示。
像@Mark上面的回答中所述,他们可以通过使用\
来逃脱
FROM RFC :
2.5。 string
string的表示类似于C系列编程语言中使用的约定。 一个string以引号开头和结尾。 除了必须转义的字符:引号,反转斜线和控制字符 (U + 0000到U + 001F)之外,所有Unicode字符都可以放在引号内。
任何angular色都可能被转义。