Java 8中的StringJoiner与String.join的示例

将多个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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小米4系统定位服务器地址,小米4原装浏览器怎么开启定位系统

手机系统最好是开发版,稳定版必须先root,可以自己root(另找教程),也可以刷成开发版。我的手机系统是MIUI4.10.31(开发版),可以在“系统更新”查看,具有root功能。小米4如何开启虚拟键盘方法安装RE管理器和Root Explore…

中如何将方形图片转换成圆形图片_【PS】PS中不可不知的实用技巧!你都掌握了吗?...

今天给大家分享一些在PS中经常用到的实用小技巧,操作简单易上手。01 拉伸图片人物不变形在我们在PS里想要拉伸一些图片时,里面的人物往往会跟着一起变形,那么如何改变图片比例的同时,又不影响人物的形态呢?打开我们需要…

jooq 执行sql_使用jOOQ和Java 8的CompletableFuture进行异步SQL执行

jooq 执行sql响应式编程是一个新的流行词,它实际上仅表示异步编程或消息传递。 事实是,函数语法极大地帮助构建了异步执行链,今天,我们将看到如何使用jOOQ和新的CompletableFuture API在Java 8中做到这一点。 实际上&#xff0c…

python系统状态_python实现系统状态监测和故障转移实例方法

代码如下:#coding: utf-8import socketimport selectimport timeimport osimport threadingdef ser():s socket.socket(socket.AF_INET,socket.SOCK_DGRAM)s.bind(("",43244))while 1:infds,outfds,errfds select.select([s],[],[],5)if infds:sms s.recv(1024)if…

ubuntu系统安装socket服务器,Ubuntu上进行socket编程,并且实现通信功能

#include #include #include#include#include #include#include #include #include #include#include #include#include #include #define PERM S_IRUSR|S_IWUSR#define MYPORT 5500 //宏定义,定义通信端口#define BACKLOG 10//宏定义,定义服务程序可以连…

使用JUnit对ADF应用程序进行单元测试

JUnit是Java语言的单元测试软件包,由于ADF构建在J2EE框架之上,因此可以用来测试Oracle ADF应用程序。 单元测试基本上是根据某些定义的测试标准来验证最小的可测试模块的过程。 在这里,我将说明如何在JDeveloper 12.2.1.3中设置和使用JUnit来…

libgo高性能网络服务器,【开源】gnet: 一个轻量级且高性能的 Golang 网络库

![](https://ask.qcloudimg.com/http-save/1303222/sipe2g9n9h.png)# Github 主页[https://github.com/panjf2000/gnet](https://github.com/panjf2000/gnet)欢迎大家围观~~,目前还在持续更新,感兴趣的话可以 star 一下暗中观察哦。# 原文博客[gnet: 一个…

拆分js文件_2021入门Webpack,看这篇就够了:Webpack.config.js 解析

这是优妈成长记的第63篇原创这是一个webpack配置说明本文是发布在github上webpack-demo的README文件内容。主要对webpack.config.js每一条的注释说明。github项目地址:https://github.com/hourong88/webpack-demo可以点击文章最下方【阅读原文】跳转github链接查看&…

orcad自上而下_开发自上而下的Web服务项目

orcad自上而下这是从Alessio Soldano编辑的Advanced JAX-WS Web Services手册中摘录的示例章节。 第一章介绍了自底向上创建Web服务端点的方法。 它允许非常快地将现有bean作为Web Service端点公开:在大多数情况下,将类转换为端点只需在代码中添加少量注…

安装win7系统不能开机启动服务器,win7系统开机启动项不能加载的原因分析及解决...

开机启动项是每台电脑都有的东西,就是多和少的问题的,很多人开机的时候喜欢加载很多的启动项,其实这也没什么不好的。现在的电脑为了受到更好的保护,往往在开机的时候就加载了一些启动项,如:杀毒软件&#…

七大罪过与如何避免

在整个本文中,我将在代码片段中使用Java,同时还将使用JUnit和Mockito 。 本文旨在提供示例测试代码,这些示例可以是: 难以阅读 难以维护 在这些示例之后,本文将尝试提供替代方法,这些替代方法可用于增强…

4 指针运算_C++用指针访问数组元素(学习笔记:第6章 08)

用指针访问数组元素[1]数组是一组连续存储的同类型数据,可以通过指针的算术运算,使指针依次指向数组的各个元素,进而可以遍历数组。定义指向数组元素的指针定义与赋值例:int a[10], *pa; pa&a[0]; 或 paa;等效的形式经过上述定…

asyncexec_如何安全使用SWT的显示器asyncExec

asyncexec大多数用户界面(UI)工具箱都是单线程的, SWT也不例外。 这意味着必须仅从单个线程(即所谓的UI线程)访问UI对象。 另一方面,应在后台线程中执行长时间运行的任务,以使UI保持响应。 这使…

属性面板 脚本_3.1 创建和使用脚本

在unity中,游戏物体的行为是通过组件来驱动的,我们可以通过内建的组件来给我们的游戏物体组合各种能力,尽管如此,要知道我们的需求永远是动态的,很快我们就会发现,内建的组件功能已经无法满足我们的需求&am…

新的JMetro JavaFX 11兼容版本

你好,我们又见面了! 这次是一个新版本,该版本与JavaFX 11兼容。 继续阅读以获取详细信息。 JMetro 8.5.7和11.5.7版本 JMetro代码已分为2个分支。 master分支具有Java 8兼容的JMetro版本,“ 11”分支具有Java 11兼容的版本。 以…

vue加跨域代理静态文件404_解决vue本地环境跨域请求正常,版本打包后跨域代理不起作用,请求不到数据的方法——针对vue2.0...

问题:在本地使用了proxyTable代理可以正常跨域请求后台数据,打包上传后就无法获得后台的json文件。查看了相关资料可以用nginx进行解决。还可以使用命名环境变量,请求的时候进行判断,话不多说上干货module.exports merge(prodEnv…

tomee_使用Vysper,TomEE和PrimeFaces将XMPP服务器嵌入JSF Web应用程序内部

tomee我有一个需要在完成某些工作时通知用户的应用程序。 它使用JSF和Primefaces,因此可以使用大气 (也称为Push)来实现这种通知。 但是另一个有趣的方法是使用嵌入在Java Web应用程序中的XMPP服务器。 好的,好的,您不…

板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!

对于一些比较复杂的结构,Altium的处理能力有限,通常采用AutoCAD来进行设计,然后在Altium中执行菜单栏中“文件”→“导入”→DWG/DXF命令,选择需要导入的DXF文件即可。如果导入过程中出现了乱码,报错等问题要如何解决呢…

您如何使用硒来计算自动化测试的投资回报率?

跨浏览器测试是一种测试,需要大量的精力和时间。 通过不同的浏览器,操作系统,设备,屏幕分辨率测试Web应用程序,以评估针对各种受众的Web内容呈现的过程是一项活动。 特别是如果手动处理。 使用Selenium进行的自动跨浏览…

流量复制_详解Linux系统流量复制--gor、tcpcopy、nginx模块流量复制等

概述对于一些有并发要求的业务,特别是对接外部流量时,产品上线前一定要做的就是压力测试,但是常规的压力测试并不能覆盖所有情况。以gemeter、ab,、webbench、http_load为例,这些通过模拟请求的压测工具,只能发送特定的…