如何在java注释中读取unicode字符

时间:2013-11-30 16:33:42

标签: java unicode

class Why
{
    public static void main(String[]s)
    {
        String st2="A";
        System.out.println(st2);
        // String st4="MN3444\u000ar4t4";
        System.out.println(st4);

    }
}

请编译上面的代码,我在评论行中收到错误。

我无法理解编译器的这种行为, 这个错误意味着什么?

2 个答案:

答案 0 :(得分:5)

在编译之前,每个Unicode字符都被其值替换,因为\u000a代表新的行代码

// String st4="MN3444\u000ar4t4";

与此代码相同(请注意\u000a之后的文字将移至新行,这意味着它将不再是评论的一部分)

// String st4="MN3444
r4t4";

您可以使用

进行测试
//\u000a;System.out.println("hello comment");

等于

//
System.out.println("hello comment");

并将为您提供结果输出:hello comment

答案 1 :(得分:3)

如果我们查看\u000a的ASCII表,我们会看到这是换行符。所以我认为编译器会在注释中替换ASCII转义的相应值。由于这是换行符,因此代码如下所示:

// String st4="MN3444
r4t4";

这就是为什么编译器说:“字符串文字没有被双引号正确关闭”。

因此,这也解释了为什么它适用于多行评论:

/ * String st4 =“MN3444 \ u000ar4t4”; * /

解析为:

   /* String st4="MN3444
r4t4"; */

这是一个很好的评论。


行为已定义:JLS §3.2. Lexical Translations

  

原始Unicode字符流被转换为序列   令牌,使用以下三个词汇翻译步骤,即   依次申请:

     

Unicode原始流中的Unicode转义(第3.3节)的转换   字符到相应的Unicode字符。一个Unicode转义   形式\ uxxxx,其中xxxx是十六进制值,表示   UTF-16代码单元,其编码为xxxx。此转换步骤允许   任何只用ASCII字符表示的程序。


就像测试用例一样,编译很好:)

\u0053\u0079\u0073\u0074\u0065\u006d\u002e\u006f\u0075\u0074\u002e\u0070\u0072\u0069\u006e\u0074\u006c\u006e\u0028\u0022\u0054\u0068\u0069\u0073\u0020\u0069\u0073\u0020\u0063\u006f\u006f\u006c\u0021\u0022\u0029\u003b