[英]Generate a String object from a List of code point integers?
如果我有一個List< Integer >
其整數值是 Unicode代碼點數。 如何構造由這些代碼點確定的字符的String
對象?
例如:
List < Integer > codePoints = List.of( 100, 111, 103, 128054 ) ;
… 要么:
List < Integer > codePoints = "cat".codePoints().boxed().toList();
如何從codePoints
獲取另一個值為cat
String
對象?
String
有一個構造函數,它接受一個int
代碼點數字數組。
int[] ints = codePoints.stream().mapToInt(i -> i).toArray();
String string = new String(ints, 0, ints.length);
轉換List
-> Stream
-> IntStream
-> int[]
-> String
List
➠ Stream
➠ StringBuilder
➠ String
一種解決方案是將您的List
轉換為Stream
。 然后將該流的元素收集到StringBuilder
。 StringBuilder
類提供了一個appendCodePoint
方法,專門用於容納代碼點整數。 當可變StringBuilder
完成時,轉換為不可變String
。
String output = codePoints.stream().collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append ).toString();
或不同的格式:
String output =
codePoints
.stream()
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString();
這是一些示例代碼。
String input = "dog🐶" ;
List < Integer > codePoints = input.codePoints().boxed().collect( Collectors.toList() ); // In Java 16+, replace the last part with simply `.toList()`.
String output =
codePoints
.stream()
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString();
輸入:狗🐶
代碼點:[100, 111, 103, 128054]
輸出:狗🐶
要了解使用StringBuilder
方法引用的代碼如何工作,請參閱Java 8 Int Stream collect with StringBuilder 。
為方便起見,我們可以制作此代碼的實用方法。 為了安全起見,我們可以添加對.filter
的調用以跳過任何無效的代碼點編號(負數或超出Character.MAX_CODE_POINT
)。
public static final String listOfCodePointsToString( List< Integer > codePoints )
{
String output =
codePoints
.stream()
.filter( codePoint -> Character.isValidCodePoint( codePoint ) )
.collect( StringBuilder :: new , StringBuilder :: appendCodePoint , StringBuilder :: append )
.toString();
return output ;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.