Java String codePoint相关api

本文深入探讨了Java中字符编码的细节,特别是如何处理表情符号等复杂字符。通过实例介绍了codePointAt、codePointBefore及codePointCount等方法的使用,并解释了它们在处理多字节字符时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

codePoint

  • 代码点&代码单元,是从Unicode标准而来的术语,Unicode标准的核心是一个编码字符集
  • 在java中, 一个字符, 仅仅代表一个代码点(codePoint),
    但却有可能代表多个代码单元(在java中就是两个字节, 一个char),比如表情符?,
    只代表一个代码点, 却占着两个char

java api

  • 首先看一下表情符的length()长度
int length = "?".length();
System.out.println("length " + length);//2
  • int codePointAt(int index): 返回char数组的给定索引上的代码点
int at1 = "?".codePointAt(0);
System.out.println("at1 " + at1);//128513
int at2 = "?".codePointAt(1);
System.out.println("at2 " + at2);//56833
  • int codePointBefore(int index): 这里有疑惑, 按理说应该返的代码点值跟上面方法一样才对
int before1 = "?".codePointBefore(1);
System.out.println("before1 " + before1);//55357
int before2 = "?".codePointBefore(2);
System.out.println("before2 " + before2);//128513
  • int codePointCount(int beginIndex, int endIndex): 返回某个索引区间的代码点数量,
    我们重点用这个
int count = "?".codePointCount(0, "?".length()-1);
System.out.println("count " + count);//1
  • IntStream codePoints(): 返回所有代码点值的Stream
"?".codePoints().boxed().forEach(
        integer -> System.out.println(integer));
  • int offsetByCodePoints(int index, int codePointOffset): 头疼, 后边再分析
int offset = "??".offsetByCodePoints(1, 2);
System.out.println("offset " + offset);//4

参考资料

总结的时候发现还是有些疑问的, 烦烦烦, 待续吧
java的字符编码集
What exactly does String.codePointAt do?

转载于:https://www.cnblogs.com/simple-huang/p/8643799.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值