Java String.codePointAt具体做什么?
最近我在Java中遇到了String方法。我还发现了一些其他的代码点方法:Java String.codePointAt具体做什么?,java,string,unicode,codepoint,Java,String,Unicode,Codepoint,最近我在Java中遇到了String方法。我还发现了一些其他的代码点方法:codePointBefore,codePointCount等等。它们肯定与Unicode有关,但我不理解 现在我想知道什么时候以及如何使用codePointAt和类似的方法。简而言之,很少使用Java中的默认字符集:),但要获得更详细的解释,请尝试以下帖子: 希望这有助于您澄清问题:)简短回答:它提供了从字符串中指定索引开始的字符串。i、 e.该位置字符的“unicode编号” 更详细的回答:Java是在16位(也称
codePointBefore
,codePointCount
等等。它们肯定与Unicode有关,但我不理解
现在我想知道什么时候以及如何使用
codePointAt
和类似的方法。简而言之,很少使用Java中的默认字符集:),但要获得更详细的解释,请尝试以下帖子:
希望这有助于您澄清问题:)简短回答:它提供了从
字符串中指定索引开始的字符串。i、 e.该位置字符的“unicode编号”
更详细的回答:Java是在16位(也称为char
)足以容纳任何已存在的Unicode字符(这些部分现在称为Unicode)时创建的。后来,Unicode被扩展到包含代码点大于216的字符。这意味着char
不能再保存所有可能的Unicode码点
解决方案是:它将“旧”Unicode码点存储在16位(即正好一个char
),将所有新码点存储在32位(即两个char
值)。这两个16位值称为“代理项对”。现在严格地说,char
保存的是“UTF-16代码单元”,而不是过去的“Unicode字符”
现在,所有“旧”方法(仅处理char
)都可以很好地使用,只要您不使用任何“新”Unicode字符(或不真正关心它们),但如果您也关心新字符(或只需要完全支持Unicode),则需要使用“代码点”实际上支持所有可能的Unicode代码点的版本
注意:BMP中没有的unicode字符的一个非常著名的例子(即,仅在使用代码点变体时才起作用)是表情符号:即使是简单的笑脸代码点也支持65535以上的字符,即Character.MAX_值
如果文本具有如此高的字符,则必须使用代码点或int
而不是char
s
它不支持UTF-16,UTF-16可以使用一个或两个16位字符并将其转换为int
好的,一般来说,这只适用于最近添加的字符,如非繁体中文。嗯,不仅仅是非繁体中文:许多鲜为人知的语言、一些数学符号、表情符号以及几乎所有最近引入Unicode的东西都不在BMP中。有一个问题。这些方法与字符集没有(直接)关系(除了我知道没有非通用的字符集编码BMP之外的任何东西)。你能提供一个例子,其中charAt()
无法给出完整的代码点,但是codePointAt()
会成功吗?对于Zaid Khan:String s3=“\u0041\u00DF\u6771\uD801\uDC00”;System.out.println(s3.charAt(3));System.out.println(s3.codePointAt(3));