整数对象 (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
;即 0
到 0xffff
范围内的数字。 Unicode code-points 范围最大 U+10FFFF
,许多不能表示为单个 char
值。
所以这给你带来了问题:
如果你要表示的code-points都在U+0000
和U+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
}
注:
int
值不是有效代码点 包括 负值、大于 0x10ffff
的值以及下限和上限代理项 code-units。
- 一些常用的 Unicode code-points 大于 U+10000。例如,表情符号的 code-points!这意味着使用
Character
是一个 坏主意 。最好使用 String
、char[]
或 Integer
.
It seems to work so far.
我猜你还没有尝试过@Shawn 的表情符号方法。
Is there a way around using a downcast?
没有
if(i == 0)
throw new NullPointerException();
这是错误的:
零是有效的 code-point。
即使它无效,它也不是 null
。所以扔NullPointerException
是完全不合适的。
如果您担心 i
是 null
的情况,请不要担心。任何拆箱 i
的操作都会 自动 抛出 NullPointerException
如果它是 null
。让它发生吧...
:)我对编码还很陌生!我的问题如下:
我有一个方法获取一个整数对象 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
;即 0
到 0xffff
范围内的数字。 Unicode code-points 范围最大 U+10FFFF
,许多不能表示为单个 char
值。
所以这给你带来了问题:
如果你要表示的code-points都在
U+0000
和U+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
}
注:
int
值不是有效代码点 包括 负值、大于0x10ffff
的值以及下限和上限代理项 code-units。- 一些常用的 Unicode code-points 大于 U+10000。例如,表情符号的 code-points!这意味着使用
Character
是一个 坏主意 。最好使用String
、char[]
或Integer
.
It seems to work so far.
我猜你还没有尝试过@Shawn 的表情符号方法。
Is there a way around using a downcast?
没有
if(i == 0) throw new NullPointerException();
这是错误的:
零是有效的 code-point。
即使它无效,它也不是
null
。所以扔NullPointerException
是完全不合适的。如果您担心
i
是null
的情况,请不要担心。任何拆箱i
的操作都会 自动 抛出NullPointerException
如果它是null
。让它发生吧...