整数对象 (Unicode) 到字符对象

Integer Object (Unicode) to Characterobject

:)我对编码还很陌生!我的问题如下:

我有一个方法获取一个整数对象 i 作为参数,这个整数应该是一个 Unicode。现在我的问题是,有没有办法将给定的 Unicode 转换为 Character 对象? 一个小例子来说明这个问题:

public Character randomName(Integer i) {
    if(i == 0)
            throw new NullPointerException();
    if(i > Character.MAX_VALUE)
            throw new FormatException(i);
    else {
            Character c = new Character(i);
            return c;
}

当然这行不通,但我找不到解决方法.... 向下转换不起作用,我通常使用 char 和 int,但在这种情况下我必须这样做。

已经感谢您的帮助!!

问题是一个Character对象代表了一个char;即 00xffff 范围内的数字。 Unicode code-points 范围最大 U+10FFFF,许多不能表示为单个 char 值。

所以这给你带来了问题:

  • 如果你要表示的code-points都在U+0000U+FFFF之间,那么你可以将它们表示为Character值。

  • 如果任何 U+10000 或更大,那么它将不起作用。

所以,如果你有一个代表 Unicode code-point 的 int,你需要做这样的事情:

int value = ...

if (Character.isDefined(value)) {
    if (value <= 0xffff) {
        return Character.valueOf((char) value);
    } else {
        // code point not representable as a `Character`
    }
} else {
    // Not a valid code-point at all
}

注:

  1. int 值不是有效代码点 包括 负值、大于 0x10ffff 的值以及下限和上限代理项 code-units。
  2. 一些常用的 Unicode code-points 大于 U+10000。例如,表情符号的 code-points!这意味着使用 Character 是一个 坏主意 。最好使用 Stringchar[]Integer.

It seems to work so far.

我猜你还没有尝试过@Shawn 的表情符号方法。

Is there a way around using a downcast?

没有

if(i == 0)
       throw new NullPointerException();

这是错误的:

  1. 零是有效的 code-point。

  2. 即使它无效,它也不是 null。所以扔NullPointerException是完全不合适的。

  3. 如果您担心 inull 的情况,请不要担心。任何拆箱 i 的操作都会 自动 抛出 NullPointerException 如果它是 null。让它发生吧...