Java字符串码点与代码单元,offsetByCodePoints与codePointAt方法总结

首先在java字符串中,大多数字符由一个代码单元表示,而辅助字符则需要一对代码单元表示,一个代码单元即16位。码点代表一个字符对应的值。

String类的length()方法返回的并不能代表字符串中字符的数量,而是代码单元的数量。在有辅助字符时两者是不一致的
String str=“𝕆𝕆”;

int n=str.length(); // n=4

原因在于字符𝕆(U+1D546)需要两个代码单元\uD835和\uDD46

要想得到实际的字符长度,即码点数量,可以调用:

int cpCount=str.codePointCount(0,str.length()); // 2

该方法的第一个参数是起始下标,第二个是偏移量,该下标是与代码单元数量对应的,从0开始。例str的下标为0,1,2,3。偏移量也是代码单元的偏移。

charAt(n)方法返回下标n处的代码单元:

char a=str.charAt(0); //a=? 

该处a显示?的原因在于,构成辅助字符的第一代码单元(U+D800~U+DBFF)和第二代码单元(U+DC00-U+DFFF)并不能单独表示字符。

要想得到第i个码点,可使用:

int index=str.offsetByCodePoints(0,1);  // index=2
int index=str.offsetByCodePoints(1,1);  // index=2

该方法第一参数为下标,第二参数为码点偏移量(并不是下标偏移),返回结果为从指定下标开始偏移的码点在字符串中的下标。注意****辅助字符对应两个下标,由第一个下标表示

int cp=str.codePointAt(index); //cp=120134,即为U+1D546

该方法返回的是对应下标的码点值。

该结论为自己总结,欢迎探讨!

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值