在java中如何从另一个字符中获取字符

在java中如何从另一个字符中获取字符,java,Java,假设A的unicode是\u9876。我想在A.ie H之后得到7个字符。 有没有什么方法可以让do(A的unicode)+7,然后将其转换成一个字符。您已经给出了答案。只需将7添加到char值中,java就会知道如何处理它。这篇文章不是答案,而是一篇“混乱清理”的文章 首先,Unicode代码点的范围从U+0000到U+10FFFF;在所有这些范围内,一些代码点实际上是无效的 Java的char本质上是一个UTF-16代码单元。对于基本多语言平面之外的Unicode代码点,即U+FFFF之上,

假设A的unicode是\u9876。我想在A.ie H之后得到7个字符。
有没有什么方法可以让do(A的unicode)+7,然后将其转换成一个字符。

您已经给出了答案。只需将7添加到char值中,java就会知道如何处理它。

这篇文章不是答案,而是一篇“混乱清理”的文章

首先,Unicode代码点的范围从U+0000到U+10FFFF;在所有这些范围内,一些代码点实际上是无效的

Java的
char
本质上是一个UTF-16代码单元。对于基本多语言平面之外的Unicode代码点,即U+FFFF之上,需要两个字符来编码一个代码点;看见对于BMP中的代码点,Unicode和
char
之间存在一对一的映射

除此之外,尽管它有特殊的作用,
char
是一种数字类型;它也是Java中唯一的无符号数字类型。您可以对其使用算术运算,对于BMP中的代码点,将7添加到“\u9876”的
char
中将给出代码点“\u9883”

但鉴于上述情况,这是一个危险的操纵


(fwiw,在BMP上方,
Character.toChars()
将返回一个“字符对”;返回数组的第一个元素将是引导代理,第二个元素将是跟踪代理;Java API仍然使用旧的Unicode术语,并将其称为“高”和“低”要了解更多详细信息,请参阅,它在解释什么是什么方面做得很好)

整数促销不是很有趣吗?当你真的有另一件东西的时候,想到你有一件东西真是太好了

看看这是否有助于你做你想做的事情:

char test = '\u0041'; 
char add = 7;
char sum1 = '\u0041' + 7;      //Works
//char sum2 = '\u0041' + add;  //Type mismatch, cannot convert from int to char
//char sum3 = test + 7;        //Type mismatch, cannot convert from int to char
//char sum2 = test + (char)7;  //Type mismatch, cannot convert from int to char
//char sum4 = (int) test + 7;  //Type mismatch, cannot convert from int to char
char sum5 = (char) ( (int)test + 7 );//Works
char sum6 = (char) ( test + add );   //Works
//char sum7 = test + add;      //Type mismatch, cannot convert from int to char

System.out.println("test = " + test);
System.out.println("sum1 = " + sum1);
System.out.println("sum5 = " + sum5);
System.out.println("sum6 = " + sum6);
为什么??整数升级。Java只将字符视为内存中的字符。在CPU中,它们变成整数。大多数情况下,这种情况发生在无形中,而你却没有注意到。我想这次你做到了。简而言之,您忘记将您的字符转换回字符。有趣的东西

此外,A的代码为\u0041

9876是这个小家伙:顶

9883就是这个小家伙:颃

当然,只需在
char
值中添加7即可。为什么不能在
char
值中添加7呢?您不需要将其转换为unicode。请记住,
char
是一种数字类型。是的,
“Number”
是一个
字符串
“这篇文章不是答案”。。嗯,它确实看起来像一个:p这听起来像是一个复杂的方式,说,“你不能把东西加在一起,它们可能会溢出!”9883不是很好地在FFFF下吗?您可以添加字符。要做到这一点,必须理解java中一些尘土飞扬的角落。@CandiedOrange如果它这么简单的话。。。不,主要问题不是溢出;主要的问题是,您可以创建一个“无效的”
char
,实际上是一个无效的char序列——一个完全没有有效代码点的整个
字符串。算术溢出是您在这里遇到的最小问题。您只能通过超出有效范围的增量来创建无效字符。远离保留的部分,一切都会好起来的。我知道不同的编码方案保留不同的位,并使用多个字节和可变字节对字符进行编码,但不要让人觉得,如果不手动键入每个字符,他就无法打印ASCII表。@CandiedOrange我说过吗?看来你完全误解了我想说的话。当你谈论Java时,谈论ASCII是一个基本的错误。碰巧Unicode的U+0000到U+007f与ASCII匹配,但相似性到此为止。您可能认为它很简单,但请先尝试一下,看看会得到什么。