Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为包含4字节字符的字符串添加子字符串?_Java_String_Unicode_Utf 16_Codepoint - Fatal编程技术网

Java 如何为包含4字节字符的字符串添加子字符串?

Java 如何为包含4字节字符的字符串添加子字符串?,java,string,unicode,utf-16,codepoint,Java,String,Unicode,Utf 16,Codepoint,我有一个可以包含4字节字符的字符串。例如: String s=“\uD83D\uDC4D1234\uD83D\uDC4D” 我也有一个大小,我应该使用它来获得一个子字符串。大小以字符为单位。假设大小为5,那么我应该得到前4个字节的字符以及“1234” 直接使用子字符串作为s。子字符串(0,5)返回第一个字符,只返回“123”的结果是错误的 我可以通过以下方式使用代码点获得正确的结果: String s = "\uD83D\uDC4D1234\uD83D\uDC4D"; StringBuffer

我有一个可以包含4字节字符的字符串。例如:

String s=“\uD83D\uDC4D1234\uD83D\uDC4D”

我也有一个大小,我应该使用它来获得一个子字符串。大小以字符为单位。假设大小为5,那么我应该得到前4个字节的字符以及“1234”

直接使用子字符串作为
s。子字符串(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);
    }
});
String s=“\uD83D\uDC4D1234\uD83D\uDC4D”;
StringBuffer buf=新的StringBuffer();
长尺寸=5;
s、 codePoints().forEachOrdered(charInt->{
if(buf.codePoints().count()
我打赌应该有更好、更高效的代码来实现这一点。

您可以使用它来帮助查找5个代码点后的字符索引,然后将其用作子字符串的第二个参数:

String s = "\uD83D\uDC4D1234\uD83D\uDC4D";
String sub = s.substring(0, s.offsetByCodePoints(0, 5));

我不明白。Java中的字符是两个字节<代码>子字符串
解释字符,而不是代码点(或图形)。你想要竖起大拇指和1234作为你的结果吗?那太好了。谢谢