將字符串轉換為字符流
1.概述
Java 8引入了Stream
API,具有用於處理序列的類似功能的操作。如果您想了解更多關於它的信息,請看這篇文章。
在這篇快速文章中,我們將看到如何將String
轉換為單個字符Stream
。
2.使用chars()
轉換
String
API具有一個新方法chars()
,通過該方法我們可以從String
對象獲取S
tream
的實例。這個簡單的API從輸入String
返回一個Int
Stream
實例。
簡而言之, IntStream
包含String
對像中字符的整數表示形式:
String testString = "String";
IntStream intStream = testString.chars();
可以使用字符的整數表示形式,而無需將它們轉換為等效的Character
。這將導致一些次要的性能提升,因為無需將每個整數裝箱到Character
像中。
但是,如果要顯示要讀取的字符,則需要將整數轉換為人類友好的Character
形式:
Stream<Character> characterStream = testString.chars()
.mapToObj(c -> (char) c);
3.使用codePoints()
轉換
另外,我們可以使用codePoints()
方法從String.
獲取IntStream
的實例String.
使用此API的優點是可以有效地處理Unicode補充字符。
補充字符由Unicode代理對錶示,並將被合併為單個代碼點。這樣,我們可以正確處理(並顯示)任何Unicode符號:
IntStream intStream1 = testString.codePoints();
我們需要將返回的IntStream
映射到Stream<Character>
以將其顯示給用戶:
Stream<Character> characterStream2
= testString.codePoints().mapToObj(c -> (char) c);
4.轉換為單個Strings
Stream
到目前為止,我們已經能夠獲得字符Stream
;如果我們想要一個由單個字符String
的Stream
怎麼辦?
正如本文前面所指定的那樣,我們將使用codePoints()
或chars()
方法來獲取IntStream
的實例,該實例現在可以映射到Stream<String>
。
映射過程包括首先將整數值轉換為它們各自的等效字符。
然後,我們可以使用String.valueOf()
或Character.toString()
將字符轉換為String
對象:
Stream<String> stringStream = testString.codePoints()
.mapToObj(c -> String.valueOf((char) c));
5.結論
在本快速教程中,我們將學習通過調用codePoints()
或chars()
方法從String
對象獲取Character
流。
這使我們能夠充分利用Stream
API –方便而有效地操作字符。
與往常一樣,可以在GitHub上找到代碼段。