将多个String文字或对象合并为一个是常见的编程要求,并且经常会发现需要为应用程序将String列表或String集合转换为CSV String的情况。 长期以来,JDK API无法将多个String文字或对象连接在一起,这迫使程序员编写诸如遍历所有String对象并使用String串联手动将其连接以创建最终的连接String的黑客。 即使这种方法有效,但仍然充满了错误和黑客,就像您需要注意不要在第一个元素之前和最后一个元素之后添加定界符,这经常会引起问题,尤其是对于初学者和初级Java开发人员而言。

但是这种方法的最大问题是每个人都需要重新发明轮子。 由于这是一个非常普遍的要求,因此您会发现许多程序员编写相同的例程并犯相同的错误,并且通常以StackOverflow结尾来解决他们的问题。 幸运的是, Java 8彻底解决了这个问题。

JDK 8 API提供了多种连接字符串的方式,例如您可以使用StringJoiner类连接String或通过调用String.join()方法来连接String。

在本文中,我们将探讨这两种连接字符串的方法,并了解它们之间的区别,每种方法的优缺点,何时使用StringJoiner以及何时使用String.join()是更好的选择。

JDK 8 API添加了一个名为java.util.StringJoiner的新类,该类使您可以使用指定的定界符或连接器连接多个String。 例如,您可以连接多个用逗号分隔的字符串
(,)创建CSV字符串,甚至更好,您可以在Linux中通过使用正斜杠“ /”加入String来为Linux中的目录创建完整路径,如Cay所解释。 S. Horstmann在《 不耐烦Java SE 9》中,这是我最喜欢学习Java的书。

这是一个例子:

StringJoiner joiner = new StringJoiner("/");
joiner.add("usr");
joiner.add("local");
joiner.add("bin");

这将为您提供一个字符串,例如“ usr / local / bin”,您可以将其传递给任何程序。 如果要使用前缀“ /”作为绝对路径,则可以进一步添加前缀;如果需要相对路径,则可以像这样使用前缀。

StringJoiner的另一个优点是它提供的流畅的API,这意味着您可以在一行中编写代码。 例如,上面的代码可以使用StringJoiner的流畅方法按以下方式重写:

String result= new StringJoiner("/").add("usr").add("local").add("bin");

这将打印:

"usr/local/bin"

在Java 8中使用join()方法连接字符串

StringJoiner的问题在于,您需要知道有一个StringJoiner类,它并不算太坏,但是如果您可以直接从非常流行的java.lang.String类本身中加入String,该怎么办呢? 嗯,这就是Java设计师的想法,他们添加了一个静态join()方法来直接从String类本身连接String。

这是一个使用String.join()方法连接Java中多个String文字的示例:

String colonSeparatedValue = String.join(":", "abc", "bcd", "def");System.out.println("colon separated String : " + colonSeparatedValue);

这将打印以下字符串:

colon separated String : abc:bcd:def

这非常不错,因为现在您无需担心
没有在开头添加定界符从末尾删除 定界符, 这是在以定界符分隔的循环中将多个String手动连接在一起时遇到的常见问题之一,如我在Java中生成CSV String的示例中所示。

String.join()方法的另一个优点是,您现在可以在Java中将 字符串列表直接转换为CSV字符串 ,而无需编写任何手动代码,下面是一个示例。

List mylist = Arrays.asList("London", "Paris", "NewYork");String joined = String.join("||", mylist);System.out.println("Joined String : " + joined);

这将打印以下字符串:

Joined String : London||Paris||NewYork

很好,不是吗? 现在,您无需再用Java手动将字符串列表或一组字符串转换为CSV字符串。 还值得注意的是,String.join()内部使用StringJoiner类来连接String文字。


这是在Java 8中连接String的2种方法,第一个示例使用
StringJoiner类,而第二个示例使用String.join()方法,这是在JDK 8的java.lang.String上添加的静态实用程序方法。

package test;import java.util.Arrays;
import java.util.List;
import java.util.StringJoiner;/*** Java program to show how to join String in Java 8.* There are two ways to do that in Java 8, by using StringJoiner or* by using join() method of String class.* @author Javin*/public class Test {public static void main(String args[]) {// StringJoiner can join multiple String using any delimiter// Let's create a CSV String by joining Stirng using commaStringJoiner joiner = new StringJoiner(",");joiner.add("one");joiner.add("two");joiner.add("three");System.out.println("Comma separated String : " + joiner.toString());// You can combine all three lines into one because// StringJoiner provides a fluent interfaceStringJoiner delimitedString = new StringJoiner("|").add("id").add("name"); System.out.println("Pipe delimited String : " + delimitedString);// 2nd Example: You can also join String by String.join() method// By far, this is the most convenient method to join Strings// in Java.    String csv = String.join(":", "abc", "bcd", "def");System.out.println("colon separated String : " + csv);// You can even use String.join() method to join contents of// ArrayList, Array, LinkedList or any collection, actually// any container which implements Iterable interfaceList mylist = Arrays.asList("London", "Paris", "NewYork");String joined = String.join("||", mylist);System.out.println("Joined String : " + joined);  }}Output
Comma separated String : one,two,three
Pipe delimited String : id|name
colon separated String : abc:bcd:def
Joined String : London||Paris||NewYork

这就是在Java 8中连接String的2种方式 。 现在,您终于可以在不使用第三方库的情况下,在Java 8中加入String了,并且您还可以选择使用对您有意义的类。 通常,String类的join()方法更方便,因为您可以直接调用并传递需要连接的分隔符和单个String对象。

我的意思是,您不需要创建另一个对象,例如StringJoiner。 它还允许您从ArrayList或LinkedList之类的Collection类中连接String,这意味着您可以从String的ArrayList创建以逗号分隔的String,这有多酷?

感谢您到目前为止阅读本文。 如果您喜欢这篇文章,请与您的朋友和同事分享。 如果您有任何疑问或建议,请发表评论。

翻译自: https://www.javacodegeeks.com/2019/07/stringjoiner-string-join-java-8-examples.html

Java 8中的StringJoiner与String.join的示例相关推荐

  1. Java程序中fix time_Java Position.setFixTime方法代码示例

    import org.traccar.model.Position; //导入方法依赖的package包/类 @Override protected Object decode( Channel ch ...

  2. 为什么在Python中使用string.join(list)而不是list.join(string)?

    join() is a string method and while using it the separator string iterates over an arbitrary sequenc ...

  3. 探索时间与空间的奇妙舞蹈:Java 8中LocalDateTime的魔法时刻

    引言 Java 8为开发人员引入了众多强大的新特性和改进,其中之一就是LocalDateTime类.LocalDateTime是一个日期和时间的对象,它不包含时区信息.本文将详细介绍Java 8中Lo ...

  4. Java 9 缩小字符串( Compact String)

    从 Java 9 开始,JDK 开始引入了一个叫做 缩小字符串( Compact String). 在中文语境下,压缩和缩小都是削减的意思,很多时候是可以通用的,但是实际上还是有区别的. JDK 9 ...

  5. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  6. java string.join找不到_Java String join()用法及代码示例

    java.lang.string.join()方法使用定界符将给定元素连接起来并返回连接的字符串.请注意,如果元素为null,则将添加null.自JDK 1.8开始,java字符串中包含join()方 ...

  7. Java 8中字符串拼接新姿势:StringJoiner

    在为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点.其中还有一个重要的拼接方式我没有介绍,那就是Java 8中 ...

  8. 模拟做饭系统(java+线程中的join方法)

    (一)项目框架分析 妈妈要去做饭,发现没有酱油,让儿子去买酱油,然后回来做饭. 根据面向对象的思想,有两个对象,妈妈和儿子 主要有两个方法: (一)没有线程控制(即儿子没有买酱油回来妈妈就做好饭了)+ ...

  9. Java中是否可以继承String类,为什么

    详细解析: 1. 关于final修饰符 参考文章:  浅析Java中的final关键字 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的&qu ...

最新文章

  1. 如何制作linux文件系统,linux文件系统制作(一)
  2. JRE里居然隐藏了一个自带的js engine
  3. 稀疏矩阵十字链表类java_稀疏矩阵的十字链表存储表示
  4. Camel:构建基于消息的应用程序
  5. pycharm 修改默认的注释风格(reStructuredText风格、Google风格、Numpy风格)
  6. nemesis什么车_马力2100匹《Trion Nemesis》谜样超跑诞生中?
  7. 项目启动时 xml报错:Could not find SQL statement to include with refid 'mbgl.panDuanZbsfkxg'
  8. 庖丁解牛之-Android平台RTSP|RTMP播放器设计
  9. 不错的Unity教程
  10. 【antdesign】表单布局和校验
  11. apktool使用注意事项
  12. drupal 电商网站_为什么小型企业应该为电子商务网站选择Drupal
  13. 【Day4.4】堵车去暹罗商圈吃午餐
  14. 贝叶斯网络(belief network)
  15. 防止按钮在短时间内被多次点击多次触发事件
  16. caxa图文档服务器未启动,CAXA协同管理图文档
  17. 服务程序占用服务器内存过大处理
  18. 汇编语言实现 大小写字母转换
  19. 2016 HCTF web writeup
  20. 计算机教师职称申报工作总结,教师职称评定个人工作总结(精选3篇)

热门文章

  1. codeforces229 D. Towers(dp+贪心)
  2. 2018CCPC吉林赛区(重现赛)补题部分——F线段树待补
  3. 【主席树】可持久化数组(金牌导航 可持久化数据结构-3)
  4. 纪中B组模拟赛总结(2020.2.22)
  5. 深入JVM——OOM异常解析
  6. Maven精选系列--私库搭建及使用
  7. C++描述杭电OJ 2016. 数据的交换输出 ||
  8. 英语不会读怎么办?它来教你……
  9. HTML列表、表格和媒体元素
  10. C#实现人脸识别【SqlHelper】