12

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

char a = '\'';

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

char a = '\u0027';

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

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

4

4 回答 4

12

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

char a = ''';

...这自然是一个问题。JLS 在第 3.10.4 节字符文字)中讨论了与换行有关的内容。

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

char a = '\'';

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

char a = 0x0027;

当然,你可以这样做:

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

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

哦,或者查看Greg 的答案:(当然是反斜杠 - 所以编译器会看到char a = '\u005c\u0027';)。\u005c'\''

于 2012-12-03T23:05:36.923 回答
9

你也可以这样做

char a = '\u005c\u0027';

其中\u005c是 \ 的 Unicode

于 2012-12-03T23:12:47.687 回答
1

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

char a = ''';

这就是它不编译的原因。

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

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

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

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

于 2012-12-03T23:09:04.110 回答
1

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

char c = "\u0027".charAt(0);
于 2012-12-03T23:10:23.670 回答