java中为什么单个字符的字符串长度为2?

  • 我们知道字符串的.length()方法会返回字符串的长度,但以下有的字符串只有一个字符,.length()返回的长度却是2,例如:

    String str = "𝄞";
    System.out.println(str.length());
    

    输出结果如下
    在这里插入图片描述

  • 这是因为length方法返回的是采用utf-16编码表示的给定字符串所需要的代码单元数量(代码单元不懂的可以看这里),大多数常用字符仅用一个代码单元就可以表示,但有些却需要一对代码单元表示

  • 想要知道字符串的实际长度,即Unicode代码点的数量(一个字符对应一个代码点,代码点用16进制编写,并且在前面加上U+,例如U+0041就是字母A的代码点),可以采用如下方法

    String str = "𝄞";
    int count = str.codePointCount(0, str.length());
    System.out.println(count);
    

    此时输出

  • 额外需要知道:字符串的.charAt(n)方法返回的是处于位置n的代码单元,而不是字符,所以如果对于这样两个代码单元的字符调用.char()得不到我们想要的字符

    String str = "𝄞";
    char c = str.charAt(0);
    System.out.println(c);
    

    此时输出
    在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一酒。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值