在JDK 8中连接字符串
JDK 8引入了語言功能,例如lambda表達式 , 流 ,甚至是新的Date / Time API ,這些都會改變我們編寫Java應用程序的方式。 但是,還有一些新的API和功能可能不太“改變游戲規則”,但仍為Java編程語言帶來了更大的便利性和表現力。 在本文中,我將介紹這些較小的功能之一,并研究在JDK 8中輕松連接多個String的能力。
在JDK 8中連接多個String的最簡單方法也許是通過遍在Java類String上的兩個新的靜態方法: join(CharSequence,CharSequence…)和join(CharSequence,Iterable) 。 接下來的兩個代碼清單演示了應用這兩個String.join方法有多么容易。
使用String.join(CharSequence,CharSequence ...)
/*** Words associated with the blog at http://marxsoftware.blogspot.com/ in array.*/ private final static String[] blogWords = {"Inspired", "by", "Actual", "Events"};/*** Demonstrate joining multiple Strings using static String* "join" method that accepts a "delimiter" and a variable* number of Strings (or an array of Strings).*/ private static void demonstrateStringJoiningArray() {final String blogTitle = String.join(" ", blogWords);out.println("Blog Title: " + blogTitle);final String postTitle = String.join(" ", "Joining", "Strings", "in", "JDK", "8");out.println("Post Title: " + postTitle); }使用String.join(CharSequence,Iterable)
/*** Pieces of a Media Access Control (MAC) address.*/ private final static List<String> macPieces;static {macPieces = new ArrayList<>();macPieces.add("01");macPieces.add("23");macPieces.add("45");macPieces.add("67");macPieces.add("89");macPieces.add("ab"); };/*** Demonstrate joining multiple Strings using static String* "join" method that accepts a "delimiter" and an Iterable* on Strings.*/ private static void demonstrateStringJoiningIterable() {final String macAddress = String.join(":", macPieces);out.println("MAC Address: " + macAddress); }運行以上兩個代碼清單的輸出是:
Blog Title: Inspired by Actual Events Post Title: Joining Strings in JDK 8 MAC Address: 01:23:45:67:89:ab使用兩個靜態String.join方法是組合字符串的簡便方法,但是JDK 8引入的StringJoiner類提供了更多功能和靈活性。 下一個代碼清單演示了如何實例化StringJoiner并將其傳遞給指定的定界符(小數點),前綴(打開括號)和后綴(關閉括號)。
簡單的字符串連接器使用
/*** Demonstrate joining multiple Strings using StringJoiner* with specified prefix, suffix, and delimiter.*/ private static void demonstrateBasicStringJoiner() {// StringJoiner instance with decimal point for delimiter, opening// parenthesis for prefix, and closing parenthesis for suffix.final StringJoiner joiner = new StringJoiner(".", "(", ")");joiner.add("216");joiner.add("58");joiner.add("216");joiner.add("206");final String ipAddress = joiner.toString();out.println("IP Address: " + ipAddress); }運行上面的代碼將以下字符串打印到標準輸出:“ IP地址:(216.58.216.206)”
StringJoiner是一種特別有吸引力的方法,在這種情況下,正在使用StringBuilder將定界字符添加到要作為某種迭代類型的一部分而構建的String中。 在這種情況下,通常有必要在上一次迭代中刪除添加到該構建器末尾的額外字符。 StringJoiner非常“聰明”,只在要連接的字符串之間添加定界符,而不在最后一個字符串后添加定界符。 連續調用add(CharSequence)方法看起來與StringBuilder / StringBuffer API非常相似。
我將在本文中介紹的最終的JDK 8引入的用于連接String的方法是將流支持的集合與連接 收集器一起使用 ( 歸約操作 )。 在下一個代碼清單中對此進行了演示,其輸出與用于通過String.join打印MAC地址的String.join方法相同,該方法接受Iterable作為其第二個參數。
字符串與收藏集的流連接
/*** Demonstrate joining Strings in a collection via that collection's* Stream and use of the Joining Collector.*/ private static void demonstrateStringJoiningWithCollectionStream() {final String macAddress =macPieces.stream().map(piece -> piece.toString()).collect(Collectors.joining(":"));out.println("MAC Address: " + macAddress); }如果開發人員希望能夠為連接的字符串提供前綴和后綴,而不必連續調用add使用StringJoiner連接String所需的方法,則Collectors.joining(CharSequence,CharSequence,CharSequence)方法是完美的選擇。 下一個代碼示例顯示了上面的IP地址示例,用于演示StringJoiner ,但這一次是使用集合,流和StringJoiner收集器實現的。 輸出與前面的示例相同,無需為每個要連接的String指定add(CharSequence) 。
字符串與Collection的流,前綴和后綴聯接
/*** Demonstrate joining Strings in a collection via that collection's* Stream and use of a Joining Collector that with specified prefix * and suffix.*/ private static void demonstrateStringJoiningWithPrefixSuffixCollectionStream() {final List<String> stringsToJoin = Arrays.asList("216", "58", "216", "206");final String ipAddress =stringsToJoin.stream().map(piece -> piece.toString()).collect(Collectors.joining(".", "(", ")"));out.println("IP Address: " + ipAddress); }這篇博客文章介紹了JDK 8提供的三種連接字符串的方法:
翻譯自: https://www.javacodegeeks.com/2015/02/joining-strings-in-jdk-8.html
總結
以上是生活随笔為你收集整理的在JDK 8中连接字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux挂载u盘(linux 挂载u)
- 下一篇: 基元需要走吗?