JAVA中offsetByCodePoints与索引逐一递增的区别

我们都知道

public int offsetByCodePoints(int index , int codePointOffset)

返回 String 中从 index 处偏移 codePointOffset 个代码点(CodePoint)的索引。

但是无论是英文,还是作为宽字符的中文,代码

String str = "abc哈哈哈";
int idx = 0, idx_off = 0;
while(idx < str.length())
{
	System.out.println(String.valueof(idx_off = str.offsetByCodePoints(ndex , 1))+": "+str.substring(idx, idx_off) );
	idx = idx_off;
}

与代码

String str = "abc哈哈哈";
int idx = 0, idx_off = 0;
while(idx < str.length())
{
	System.out.println(String.valueof(idx_off = idx + 1)+
						": "+
						str.substring(idx, idx_off) );
	idx = idx_off;
}

没有什么区别,输出均为

1: a
2: b
3: c
4: 哈
5: 哈
6: 哈

变量idx_off都是以1为步长递增。
这是因为无论是中文还是英文,都是占用一个Unicode16字符,但是对于一些符号,可能需要占用两个。
例如数学符号双线(double-struck)O “

上一篇:【突破训练】CF1519E Off by One


下一篇:eslint 的基本配置介绍