【问题标题】:Java - Assign unicode apostrophe to charJava - 将 unicode 撇号分配给 char
【发布时间】:2012-12-03 23:00:20
【问题描述】:

我想将 aphostrophe 的值分配给一个字符:

char a = '\'';

但是我想使用 unicode 版本的撇号 (\u0027) 以使其与我的代码保持一致:

char a = '\u0027';

但是这样做会产生一个错误,说“未封闭的字符文字”。

如何在代码中仍然包含 unicode 代码的情况下执行此任务?

【问题讨论】:

    标签: java unicode


    【解决方案1】:

    \u0027 不起作用的原因是编译器很早就处理了 unicode 转义,当然,它最终是 '——它终止了文字。编译器实际上看到了这个:

    char a = ''';
    

    ...这自然是个问题。 JLS 在 §3.10.4Character Literals)中讨论了与换行有关的问题。

    坦率地说,我认为你最好写

    char a = '\'';
    

    ...但是char 是数字类型,所以你可以这样做:

    char a = 0x0027;
    

    当然,您可以这样做:

    char a = "\u0027".charAt(0);
    

    ...但我认为我们都同意这有点矫枉过正。 ;-)

    哦,或者查看Greg's answerchar a = '\u005c\u0027';\u005c 当然是一个反斜杠——所以编译器会看到'\'')。

    【讨论】:

    • 主要问题是\u0027 被编译器很早就处理了,所以这可能最终成为他最好的(甚至可能是唯一的)选项。
    • 另外,请查看您刚刚在编辑中链接的 JLS 底部的脚注。它说你不能使用像'\u000a' 这样的东西,因为它在类被编译之前就被处理成了一个换行符。
    • @Brian: LOL 重叠编辑和评论,刷新页面。 ;-)
    • 为什么需要更好?
    • @T.J.Crowder 嘿,我的评论在您的编辑前整整 1 分 38 秒 :D
    【解决方案2】:

    你也可以这样做

    char a = '\u005c\u0027';
    

    其中 \u005c 是 \

    的 Unicode

    【讨论】:

    • 哈哈!我喜欢它。并且考虑到 OP 首先想要使用 \u0027 的原因,这是一个非常好的主意...
    【解决方案3】:

    这是另一种选择,不过确实有点矫枉过正:

    char c = "\u0027".charAt(0);
    

    【讨论】:

      【解决方案4】:

      在 javac 做任何其他事情之前,它首先将所有 \u#### 转换为 char。所以你的代码相当于

      char a = ''';
      

      这就是它无法编译的原因。

      \u#### 不仅适用于字符/字符串文字,您可以在任何地方使用它,例如在变量名中。

      然而,人们很少在标识符中使用非拉丁字符;如果有人这样做,他可能会使用他的本地字符集,而且他也不需要 \u####。

      因此,除了字符/字符串文字之外,我们从未真正在任何地方看到 \u####,这会给不知情的人留下错误的印象。

      如果有时间机器,我们可能应该取消此功能,因为它令人困惑且未被使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-10
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 2021-12-17
        • 2023-04-01
        • 1970-01-01
        相关资源
        最近更新 更多