如何将Unicode code point整数List转换为Java String对象
List Unicode码点转String的实现方法
针对存储Unicode码点的List<Integer>,可以用以下两种Java原生方案构造对应的String对象,两种方案都支持包含增补字符(码点值大于0xFFFF)在内的所有合法Unicode码点:
方案1:使用String构造方法
先把List<Integer>转换为int类型的码点数组,直接调用String的对应构造方法即可:
// 示例场景2的代码实现 List<Integer> codePoints = "cat".codePoints().boxed().toList(); // 转换为int数组 int[] codePointArr = codePoints.stream().mapToInt(Integer::intValue).toArray(); // 构造字符串 String targetStr = new String(codePointArr, 0, codePointArr.length);
最终得到的targetStr就是值为cat的字符串,该方案Java 1.5及以上版本都支持。
方案2:使用StringBuilder遍历拼接(兼容性最优)
如果是不支持stream操作的低版本Java环境,可以手动遍历码点逐个拼接,性能也更优:
List<Integer> codePoints = "cat".codePoints().boxed().toList(); StringBuilder sb = new StringBuilder(); for (Integer codePoint : codePoints) { sb.appendCodePoint(codePoint); } String targetStr = sb.toString();
该方案同样Java 1.5及以上版本都支持。
注意:不要手动把每个码点强转为char拼接,char只能表示0-0xFFFF范围的BMP字符,遇到示例1中128054这类增补字符时会出现乱码。
内容的提问来源于stack exchange,提问作者Basil Bourque
相关产品推荐
相关产品推荐

