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提供的三种连接字符串的方法:

  1. 静态String.join方法
  2. StringJoiner实例
  3. 加入收集器的收集流

翻译自: https://www.javacodegeeks.com/2015/02/joining-strings-in-jdk-8.html

在JDK 8中连接字符串相关推荐

  1. jdk8 字符串_在JDK 8中连接字符串

    jdk8 字符串 JDK 8引入了语言功能,例如lambda表达式 , 流 ,甚至是新的Date / Time API ,这些都会改变我们编写Java应用程序的方式. 但是,还有一些新的API和功能可 ...

  2. 在Python中连接字符串的首选方法是什么?

    本文翻译自:Which is the preferred way to concatenate a string in Python? Since Python's string can't be c ...

  3. linux shell脚本字符串连接符,学习Linux shell脚本中连接字符串的方法

    这篇文章主要介绍了Linux shell脚本中连接字符串的方法,如果想要在变量后面添加一个字符,可以用一下方法: 代码如下: $value1=home $value2=${value1}"= ...

  4. Web.config中连接字符串的加密和解密

    Web.config中连接字符串的加密和解密  我们采用命令行的方式进行加密和解密.使用ASP.NET2.0提供的命令行工具aspnet_regiis.exe,该应用程序位系统目录下Microsoft ...

  5. java字符连接字符串数组_Java中连接字符串的最佳方法

    java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...

  6. Java中连接字符串的最佳方法

    最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用+运算符 使用StringB ...

  7. (译)利用ASP.NET加密和解密Web.config中连接字符串

    介绍 这篇文章我将介绍如何利用ASP.NET来加密和解密Web.config中连接字符串 背景描述 在以前的博客中,我写了许多关于介绍 Asp.net, Gridview, SQL Server, A ...

  8. 如何在PowerShell中连接字符串和变量?

    本文翻译自:How do I concatenate strings and variables in PowerShell? Suppose I have the following snippet ...

  9. 在Excel中连接字符串的方法

    在Excel中连接字符串的方法                                          此段文字节选自<Excel 2007技巧大全>一书 有时在使用Excel过 ...

最新文章

  1. GitHub 上 25 个 Python 学习资源,墙裂推荐!
  2. promise async 学习笔记
  3. 客户端代码压缩成zip和服务器开启gzip
  4. DL之Yolov3:基于深度学习Yolov3算法实现视频目标检测之对《我要打篮球》视频段进行实时目标检测
  5. ELK+Kafka 企业日志收集平台(二)这是原版
  6. 数据结构实验二:迷宫的求解
  7. 【计算机视觉】期刊整理
  8. python2020未来前景_2020年Python发展前景如何呢?
  9. iPhoneXI/XI MAX机模曝光:浴霸式摄像头着实抢眼
  10. [笔记] 如何从不同扩展名的数字证书中提取明文信息? *.pem *.der *.crt *.cer *.key之间的区别是什么?...
  11. 三段式状态机的原理/代码/仿真,1001序列检测实例Verilog
  12. 修改植物大战僵尸游戏存档
  13. Mac电脑升级13系统后,git clone 代码报错,mac升级后git ssh用不了
  14. PHP in_array 函数,解决大量数据判断in_array的效率慢,in_array 效率优化
  15. RK VOP设备树分析
  16. 双指针算法及模板应用
  17. SecureCRT如何设置窗口下黑底白字
  18. ###数字不同数之和###python123
  19. L2TP客户端之Strongswan移植(二)
  20. 如果我的猫也会写字——猫的日记猜想

热门文章

  1. 19年8月 字母哥 番外篇:周边技术生态
  2. 学生用计算机说明方法,15.文中多处运用了作比较的说明方法.请任选一例.说说运用这种方法的作用. 例子: 作用:...
  3. java虚拟机的内存模型_JVM(Java虚拟机)内存模型(转载/整理)
  4. hibernate查询缓存_在Hibernate中启用实体和查询缓存
  5. netbeans连接数据库_NetBeans Java EE技巧#1 –数据库中的实体类
  6. 探索cqrs和事件源_编写基于事件的CQRS读取模型
  7. cobertura_Cobertura和Sonar 5.1的问题
  8. java 编程工具_Java开发工具可以促进编程!
  9. Java:如何创建轻量级数据库微服务
  10. jvm分配内存_为JVM分配内存:一个案例研究