gpt4 book ai didi

java - 带有代理字符的字符串的长度 - java

转载 作者:行者123 更新时间:2023-11-29 10:01:03 25 4
gpt4 key购买 nike

我无法计算 String 的长度里面有一些替代字符?

我的字符串是,

String val1 = "\u5B66\uD8F0\uDE30";

问题是,\uD8F0\uDE30是一个字符而不是两个,所以 String 的长度应该是 2 .

但是当我计算我的 String 的长度时作为val1.length()它给出了 3作为输出,这是完全错误的。我该如何解决问题并获取 String 的实际长度?

最佳答案

您可以使用 codePointCount(beginIndex, endIndex) 来计算您的 String 中代码点的数量,而不是使用 length()

val1.codePointCount(0, val1.length())

看下面的例子,

String val1 = "\u5B66\uD8F0\uDE30";
System.out.println("character count: " + val1.length());
System.out.println("code points: "+ val1.codePointCount(0, val1.length()));

输出

character count: 3
code points: 2

仅供引用,您也不能使用 charAt()String 打印单个代理字符。为了从 String 打印单个 supplementary character 使用 codePointAtoffsetByCodePoints(index, codePointOffset),像这样,

for (int i =0; i<val1.codePointCount(0, val1.length()); i++)
System.out.println("character at " + i + ": "+ val1.codePointAt(val1.offsetByCodePoints(0, i)));
}

给予,

character at 0: 23398
character at 1: 311856

Java 8

您可以使用 val1.codePoints(),它返回序列中所有代码点的 IntStream

因为您对String 的长度感兴趣,所以使用

val1.codePoints().count();

打印代码点,

val1.codePoints().forEach(a -> System.out.println(a));

关于java - 带有代理字符的字符串的长度 - java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28252750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com