当前位置:首页 > 民俗文化

字符串拼接 字符串拼接新姿势:StringJoiner

出发地:霍利斯(微信号:霍利舒昂)

在文章《阿里巴巴为什么不建议在for循环中使用“+”进行字符串拼接》中,我们介绍了Java中字符串拼接的几种方法,以及它们的优缺点。还有一个我没有介绍的重要的拼接方法,就是Java 8中提供的StringJoiner。本文将介绍这种字符串拼接的新成员。

如果你想知道字符串拼接可以用多少种方法,我教你一个简单的方法。在Intellij IDEA中,定义一个Java Bean,然后尝试使用快捷键自动生成一个toString方法。IDEA会提示多种toString生成策略可供选择。

目前我使用的IDEA的toString生成策略是默认使用JDK 1.8提供的StringJoiner。

一个

介绍

StringJoiner是java.util包中的一个类,用来构造一个由分隔符分隔的字符序列(可选),可以以提供的前缀开始,以提供的后缀结束。

虽然这也可以通过在StringBuilder类的帮助下在每个字符串后面附加一个分隔符来实现,但StringJoiner提供了一种简单的方法来实现这一点,而无需编写大量代码。

StringJoiner类有两个构造函数和五个公共方法。最常用的方法是add方法和toString方法,类似于StringBuilder中的append方法和toString方法。

2

使用

StringJoiner的用法比较简单。在下面的代码中,我们使用StringJoiner来拼接字符串。

publicclassStringJoinerTest {

public static void main(String[]args){

StringJoiner SJ = NewStringjoiner(" Hollis ");

SJ . add(" hollishuang ");

Sj.add("Java干货");

system . out . println(SJ . tostring());

StringJoiner sj1 = NewStringjoiner(":","[","]");

Sj1.add ("Hollis ")。添加(“霍利斯·庄”)。加(" Java干货");

system . out . println(sj1 . ToString());

}

}

上述代码的输出结果:

HollischuangHollisJava干货

【霍利斯:霍利舒昂:Java干货】

值得注意的是,当我们使用StringJoiner(字符序列分隔符)初始化一个String Joiner时,这个分隔符实际上是一个分隔符,而不是一个变量字符串的初始值。

字符串连接符的第二个和第三个参数(字符序列分隔符、字符序列前缀、字符序列后缀)分别是拼接字符串的前缀和后缀。

原理

在介绍了简单的用法之后,让我们来看看这个StringJoiner的原理,看看它是如何实现的。主要看添加方法:

public string joiner add(CharSequence NewElement){

prepareBuilder()。追加(NewElement);

returnthis

}

privateStringBuilder prepareBuilder(){

if(value!= null) {

value.append(分隔符);

} else{

value= newStringBuilder()。追加(前缀);

}

returnvalue

}

我看到了一个熟悉的身影——StringBuilder。是的,StringJoiner实际上是由StringBuilder实现的。我们在为什么阿里巴巴不建议在for循环中使用“+”进行字符串拼接中介绍了StringBuilder的实现原理,这里就不赘述了。

当我们发现StringJoiner实际上是由StringBuilder实现的时候,大概可以猜到StringJoiner的性能损失应该和直接使用StringBuilder差不多!

你为什么需要字符串连接器

了解了StringJoiner的用法和原理后,很多读者可能会有一个疑问,明明已经有了StringBuilder,为什么还要在Java 8中定义StringJoiner?有什么好处?

如果读者对Java 8足够了解的话,或许可以大致猜到,这肯定和Stream有关。

作者也在Java doc中找到了答案:

一个字符串连接程序可以用来从一个流中创建格式化的输出

想象一下,在Java中,如果我们有这样一个列表:

列表<。字符串>List =不可变列表。的(“霍利斯”、“霍利斯·庄”、“爪哇干货”);

如果我们想把它拼接成以下形式的字符串:

霍利斯,霍利舒昂,爪哇干货

可以通过以下方式完成:

StringBuilder builder = NewStringBuilder();

if(!list.isEmpty()) {

builder . append(list . get(0));

for(inti = 1,n = list . size();i <。n;i++) {

builder.append(",")。append(list . get(I));

}

}

builder . tostring();

您也可以使用:

list.stream()。reduce(newStringBuilder(),(sb,s)-& gt;附加某人。追加(','),StringBuilder::append)。toString();

但是,输出结果略有不同,需要二次处理:

霍利斯,霍利舒昂,爪哇干货,

您也可以使用“+”来拼接:

list.stream()。减少((a,b)->a +","+ b)。toString();

以上方法要么代码复杂,性能低下,要么无法直接得到想要的结果。

为了满足这样的需求,Java 8中提供的StringJoiner就派上了用场。上述要求只需要一行代码:

list.stream()。收集(收集器.连接(":"))

动手吧。在上面使用的表达式中,收集器连接的源代码如下:

publicationstaticcollector & lt。CharSequence,?,字符串>;连接(字符序列分隔符、字符序列前缀、字符序列后缀){

returnnewCollectorImpl & lt>。(

()->;新字符串连接符(分隔符、前缀、后缀),

StringJoiner::add,StringJoiner::merge,

StringJoiner::toString,CH _ NOID);

}

Collector.joining的实现原理是使用StringJoiner。

当然,也许在Collector中直接使用StringBuilder看起来可以达到类似的功能,但是有点麻烦。因此,Java 8中提供了StringJoiner来丰富Stream的用法。

而StringJoiner可以轻松添加前缀和后缀。例如,如果我们想要的字符串是“[Hollis,hollschuang,Java干货]”而不是“Hollis,hollschuang,Java干货”,那么StringJoiner的优势就会更加明显。

总结

介绍了Java 8-String joiner中提供的可变字符串类,可用于字符串拼接。

StringJoiner实际上是由StringBuilder实现的,所以性能类似于StringBuilder,而且是非线程安全的。

如果日常开发需要字符串拼接,如何选择?

1.如果只是简单的字符串拼接,可以考虑直接使用“+”。

2.如果字符串是在for循环中拼接的,可以考虑使用StringBuilder和StringBuffer。

3.如果字符串是通过集合(如列表)拼接的,可以考虑使用StringJoiner。

4.如果一组数据被拼接,它可以被转换成流并由StringJoiner处理。

●数字917,直接输入本文的数字

1.《字符串拼接 字符串拼接新姿势:StringJoiner》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《字符串拼接 字符串拼接新姿势:StringJoiner》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/guoji/1051366.html

上一篇

淮安饭店煤气罐发生爆炸 其中2人经救治无效死亡

下一篇

医保回应还价 这意味着什么?

如何建立局域网共享 【技术】如何组建局域网?方法有哪些?

  • 如何建立局域网共享 【技术】如何组建局域网?方法有哪些?
  • 如何建立局域网共享 【技术】如何组建局域网?方法有哪些?
  • 如何建立局域网共享 【技术】如何组建局域网?方法有哪些?

微信怎么解除三方授权 原来我的微信、QQ 授权登录过这么多应用!(附查找及解绑方法)

  • 微信怎么解除三方授权 原来我的微信、QQ 授权登录过这么多应用!(附查找及解绑方法)
  • 微信怎么解除三方授权 原来我的微信、QQ 授权登录过这么多应用!(附查找及解绑方法)
  • 微信怎么解除三方授权 原来我的微信、QQ 授权登录过这么多应用!(附查找及解绑方法)

石膏几何体 新手美术生必备干货——超详细【石膏几何体】分类

父买罂粟给中考儿子提神 交警提醒:压力缓解要用正确方法

6月15日,父亲在中考买了罂粟花给儿子提神。交警提醒他用正确的方法缓解压力。看着面临中考压力的孩子,父亲心疼。听说用罂粟可以提振精神,但父亲居然买了一包给孩子提神。幸好南京交警高速八大队民警及时发现,没有造成不可挽回的后果...

走明线好看方法图片 家庭电线,想走明线又怕丑?可以用这两种方法试一试

  • 走明线好看方法图片 家庭电线,想走明线又怕丑?可以用这两种方法试一试
  • 走明线好看方法图片 家庭电线,想走明线又怕丑?可以用这两种方法试一试
  • 走明线好看方法图片 家庭电线,想走明线又怕丑?可以用这两种方法试一试

慢性宫颈最佳治疗方法 为什么你会得宫颈炎?慢性宫颈炎用什么药效果最好?一文读懂

  • 慢性宫颈最佳治疗方法 为什么你会得宫颈炎?慢性宫颈炎用什么药效果最好?一文读懂
  • 慢性宫颈最佳治疗方法 为什么你会得宫颈炎?慢性宫颈炎用什么药效果最好?一文读懂
  • 慢性宫颈最佳治疗方法 为什么你会得宫颈炎?慢性宫颈炎用什么药效果最好?一文读懂

写好的植物观察记录表 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)

  • 写好的植物观察记录表 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)
  • 写好的植物观察记录表 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)
  • 写好的植物观察记录表 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)

植物生长记录表图片 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)

  • 植物生长记录表图片 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)
  • 植物生长记录表图片 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)
  • 植物生长记录表图片 幼儿园植物角的那些事儿(观察记录、种植方法、多图欣赏)