Java - 将unicode撇号分配给char

时间:2012-12-03 23:00:21

标签: java unicode

我想将aphostrophe的值赋给char:

char a = '\'';

但是我想使用untropode版本的撇号(\ u0027)来保持它与我的代码一致:

char a = '\u0027';

但是这样做会给出一个错误,说“未关闭的字符文字”。

如果在代码中仍然使用unicode代码,我该怎么做呢?

4 个答案:

答案 0 :(得分:12)

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

char a = ''';

......这自然是个问题。 JLS在§3.10.4字符文字)中讨论与换行相关的内容。

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

char a = '\'';

...但char是一种数字类型,因此您可以这样做:

char a = 0x0027;

当然,你可以这样做:

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

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

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

答案 1 :(得分:9)

你也可以这样做

char a = '\u005c\u0027';

其中 \ u005c 是\

的Unicode

答案 2 :(得分:1)

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

char a = ''';

这就是为什么它不能编译。

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

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

因此,除了char / string文字之外,我们从未真正看到\ u ####,这给未出现的人留下了错误的印象。

如果有时间机器,我们应该杀掉这个功能,因为它很混乱而且没有使用它。

答案 3 :(得分:1)

这是另一种选择,但确实是一种矫枉过正:

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