【问题标题】:Integer Object (Unicode) to Characterobject整数对象 (Unicode) 到 Characterobject
【发布时间】:2022-02-01 11:48:06
【问题描述】:

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

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

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 但在这种情况下我必须这样做。

已经谢谢你的帮助了!!

【问题讨论】:

  • 这能回答你的问题吗? Creating Unicode character from its number
  • 它确实有帮助,但由于返回类型是单个字符对象,我仍然不知道如何将整数转换为字符,但非常感谢,它已经有点帮助了!
  • 请注意,Character/char 不能保存所有可能的 Unicode 代码点。
  • 但如果这不是问题,return Character.vakueOf((char) i.intValue());
  • 谢谢!到目前为止似乎工作:)

标签: java integer character


【解决方案1】:

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

所以这给你一个问题:

  • 如果您要表示的代码点都在U+0000U+FFFF 之间,那么您可以将它们表示为Character 值。

  • 如果有U+10000 或更大,则它不起作用。

因此,如果您有一个代表 Unicode 代码点的 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 的值以及上下代理代码单元。
  2. 许多常用的 Unicode 代码点大于 U+10000。例如,表情符号的代码点!这意味着使用Character 是一个坏主意。最好使用Stringchar[]Integer

到目前为止它似乎有效。

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

有没有办法使用向下转换?

没有。

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

这是错误的:

  1. 零是一个有效的代码点。

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

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

【讨论】:

  • 哇,谢谢!好吧,如果值是负数或超出角色的最大值,我的方法应该抛出异常。因此,它仅在检查是否可能后才将整数转换为字符。是的,字符串也会容易得多,但我的任务显然需要一个字符.....非常感谢!!!
  • 听起来你的任务不正确!但是我想很少有人教Java并且没有正确理解Unicode。
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
  • 2013-12-20
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
相关资源
最近更新 更多