我有一个可以包含 4 个字节字符的字符串。例如:
String s = "\uD83D\uDC4D1234\uD83D\uDC4D";
我也有一个大小,我应该用它来从中获取子字符串。大小以字符为单位。所以假设大小为 5,所以我应该得到前 4 个字节的字符以及“1234”。
直接使用子字符串作为s.substring(0, 5)
返回第一个字符和“123”的错误结果。
我可以通过这种方式使用代码点设法获得正确的结果:
String s = "\uD83D\uDC4D1234\uD83D\uDC4D";
StringBuffer buf = new StringBuffer();
long size = 5;
s.codePoints().forEachOrdered(charInt -> {
if(buf.codePoints().count() < size) {
buf.appendCodePoint(charInt);
}
});
我敢打赌,应该有一种更好、更有效的代码来实现这一点。