你只会用 StringBuilder/ StringBuffer 拼接字符串?

那你就 OUT 了!!

如果需要拼接分隔符的字符串,建议使用 Java 8 中的这款拼接神器:StringJoiner,你值得拥有。

 

StringJoiner 基本使用

字面上理解就是用来拼接字符串的,一般需要分隔符进行拼接,如:

hello, guys, AAA

这种三段式由 "," 分隔的字符串,在 Java 8 之前要使用 StringBuilder/ StringBuffer 进行拼接,如:

StringBuilder sb = new StringBuilder();
sb.append("hello");
sb.append(",");
sb.append("guys");
sb.append(",");
sb.append("AAA");
String str = sb.toString();

都是相同的分隔符逗号,这样拼接显然过于傻瓜式,如果要拼接的字符串非常多,代码会十分难看,写完感觉要崩溃。

然而 Java 8 之后有了 StringJoiner,这件事件就变得更简单,分隔符这种全部一次性交给 StringJoiner 即可。

StringJoiner 基本使用示例:

public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner(",");stringJoiner.add("hello");stringJoiner.add("guys");stringJoiner.add("AAA");System.out.println(stringJoiner.toString());
}

输出:

hello,guys,AAA

可以看到,这样写十分的干净清爽,也省去了许多没有必要的分隔符拼接操作,代码更优雅、只是可读性没 SB 直接拼接那么直观。

StringJoiner 就这么简单?

No!!!

StringJoiner 还有其他几种用法,下面的篇幅栈长会带大家解读一下。

 

StringJoiner 详细介绍

StringJoiner 的类结构图:

它的父类就是 Object,这些成员变量和方法都有什么用呢?

成员变量:

  • prefix:拼接后的字符串前缀

  • delimiter:拼接时的字符串分隔符

  • suffix:拼接后的字符串后缀

  • value:拼接后的值

  • emptyValue:空值的情况,value为 null 时返回

构造方法:

提供了两个构造方法,一个必须带分隔符,另一个必须带分隔符、前缀、后缀,可以看了 emptyValue 默认为前缀+后缀组成。

公开方法:

  • setEmptyValue:设置空值

  • toString:转换成 String

  • add:添加字符串

  • merge:从另一个 StringJoiner 合并

  • length:长度(包括前缀后缀)

 

流式 API

我们重点看下 add 方法源码:

可以看到内部其实就是用的 StringBuilder 进行封装的,首次创建会先拼接前缀,后续先添加分隔符,再添加字符串。

其实 String 底层也是用的 StringBuilder

另外一点,add 方法就是返回 StringJoiner 本身,所以可以像 StringBuilder/ StringBuffer 一样进行流式处理。

如上面的示例一行代码搞定:

public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner(",").add("hello").add("guys").add("AAA");System.out.println(stringJoiner.toString());
}

前后缀拼接

在示例中需要指定前后缀:

public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner(",", "[", "]");stringJoiner.add("hello");stringJoiner.add("guys");stringJoiner.add("AAA");System.out.println(stringJoiner.toString());
}

输出:

[hello,guys,AAA]

如上所示,前后都带中括号进行了包装。

 

空值处理

没有拼接任何字符串的几个空值处理场景。

输出空白字符串:

public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner(",");System.out.println(stringJoiner.toString());
}

输出前后缀:

public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner(",", "[", "]");
}

输出:

[]

输出指定字符串:

通过 setEmptyValue 进行设置。

public static void main(String[] args) {StringJoiner stringJoiner = new StringJoiner(",", "[", "]");stringJoiner.setEmptyValue("void");System.out.println(stringJoiner.toString());
}

输出:

void

 

String.join()

String.join() 这是针对 StringJoiner 又封装了一层的 API,同样出自 Java 8,可以传入动态参数或者迭代器。

  • java.lang.String#join(java.lang.CharSequence, java.lang.CharSequence...)

  • java.lang.String#join(java.lang.CharSequence, java.lang.Iterable<? extends java.lang.CharSequence>)

源码如下:

看源码,这两个方法只能进行简单的拼接操作,不能添加前后缀、空值设置处理等。

来个示例:

public static void main(String[] args) {String str = String.join(",", "hello", "guys", "AAA");System.out.println(str);
}

可以看到,简单处理这样使用更简便。

 

总结

今天介绍了 StringJoiner、StringBuilder、String.join() 之间的关系及使用。在使用拼间多个相同的分隔符时,使用 StringJoiner,简单处理使用 String.join() 也能完成。

针对不同的场景使用不同的 API,这才是最佳最优雅的处理方式,不要只会使用 StringBuilder!

有道无术,术可成;有术无道,止于术

欢迎大家关注Java之道公众号

好文章,我在看❤️

你只会用 StringBuilder?试试 StringJoiner,真香!相关推荐

  1. 字符串拼接还在用StringBuilder?快试试Java8中的StringJoiner吧,真香!

    点击关注公众号,Java干货及时送达 前言 之前,我们经常会通过StringBuffer或者StingBuilder对字符串进行拼接,但是你知道Java8中推出的StringJoiner吗?它比前者更 ...

  2. 别在再满屏的 if、else 了,试试策略模式,真香!!

    你还在写满屏的 if/ else/ switch 之类的判断逻辑吗? 栈长在开发人员的代码中看过太多这样的低级代码了,真的太 low,极不好维护,本文栈长就教你如何用策略模式干掉 if/ else/ ...

  3. excel appliacation 不能分配角色_用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香...

    作为一个在数据行业摸爬滚打多年的老江湖,我初入行的时候和大部分人一样,当了很长一段时间的"表哥",才开始做真正的数据分析,辅助业务决策.不过无论是当纯粹的"表哥表姐&qu ...

  4. 用了5年Excel,换了这个神奇的报表工具,不禁感叹:国产真香

    作为一个在数据行业摸爬滚打多年的老江湖,我初入行的时候和大部分人一样,当了很长一段时间的"表哥",才开始做真正的数据分析,辅助业务决策.不过无论是当纯粹的"表哥表姐&qu ...

  5. 4599 的 iPhone 11,拼多多如何从「真香」到「更香」

    每个工作日的早高峰,北京五环外的西二旗,每小时都有 2.5 万人涌出地铁站,这让西二旗成为这座城市最忙碌的地铁站. 交通部门的数据显示,根据 2017 年典型工作日,IC 卡乘客早高峰前 20 位站间 ...

  6. 渲染预览PDF文档,轻松搞定,这方案真香!

    渲染预览PDF文档,轻松搞定,这方案真香! 1.前言 2.列举一些文档预览解决方案: 3.列举一些文档解析生成解决方案: 4.案列赏析 5.准备工作: 6.模板讲解: 7.代码实现: 8.效果图: 9 ...

  7. 功能极其强大,这8款 Python 机器学习库真香

    大家好,今天给大家分享8款 Python 机器学习库,每一款都值得研究一下,喜欢的小伙伴点赞.收藏 关注.文末提供技术交流群. 推荐文章 有人把吴恩达老师的机器学习和深度学习做成了中文版 上瘾了,最近 ...

  8. 封禁华为的美国,现在不得不在5G标准制定上“恢复合作”,网友:5G真香

    十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 华为被列"实体清单"还未满一年,外媒今日却曝出消息: 美国商务部拟允许美国公司与华为合作. 这波操作的目的是什么? 根据 ...

  9. 爬一爬 iPhone 11为何嘴上说真丑,销量却真香?

    9月11号早晨,在Steve Jobs剧院举行的2019苹果秋季新品发布会之后,蹲守在发布会前的果粉们开始了自乔布斯去世之后一年一度的对苹果的群嘲.从5S的土豪金,到6的大屏幕.粗线条,iPhone7 ...

最新文章

  1. 成功解决Fatal error in launcher: Unable to create process using ‘“f:\program files\python\python36\pytho
  2. Git根据远程分支建立条新的远程分支
  3. Avalonia跨平台入门第十一篇之自定义Window
  4. 中国互联网保险代理人生存状况调查报告
  5. 虚拟邮箱怎么设置方法_腾讯企业邮箱邮件列表白名单设置方法
  6. CentOS7.4到Elasticsearch一路坑(八)(坑没填上)
  7. android期末大作业_关于大学期末的一点碎碎念
  8. [转载] 扩展Python之在Python中调用C编写的函数模块
  9. oracle j2ee数据库,J2EE连接远程Oracle数据库表
  10. Linux文件中批量转换时间戳,linux 文件日期转时间戳
  11. 谷歌命名工具_Google地图正在重命名整个社区
  12. 卡贴机变无锁教程_有锁机变无锁教程 教你轻松设置去掉卡贴有锁机变无锁完美4G...
  13. oracle sparc t5-2报价,SPARC T5-2服务器
  14. 线性代数:第五章 相似矩阵及二次型(2)二次型及其标准型 配平方法 合同变换法 正定二次型
  15. 8个身家百万的儿童创业者
  16. 百度账号找回服务器,百度网盘秒删的资源,用这工具一键找回
  17. 一键非自锁开关电路设计
  18. discuz插件,discuz采集插件,discuz插件工具
  19. 景安服务器怎么上传网站程序,Web服务器是如何被应用服务器“收编”的?
  20. IIS Nginx Apache Tomcat 中间件漏洞

热门文章

  1. python访问数据库统一方法_Python 3.x 连接数据库(pymysql 方式)
  2. idea项目启动不起来_这些教育创业项目你还不知道吗,赶紧收藏起来吧!
  3. python中or关键字在变量赋值时的用法
  4. git 历史操作日志_Git - 查看提交历史
  5. 蛋白对接_JCIM | 金属蛋白分子对接程序哪家强?七种对接程序的基准测试
  6. python编辑程序模型_python并发编程之IO模型
  7. plsql大字段保存类型_大揭秘,学习python,为什么数据类型有这么重要
  8. 最火的抓包工具winpcap使用教程
  9. 【README1】动态规划之解题思路
  10. 3-6:常见任务和主要工具之正则表达式