如何使用Java8中的StringJoiner
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章主要介绍"如何使用Java8中的StringJoiner",在日常操作中,相信很多人在如何使用Java8中的StringJoiner问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年11月08日如何使用Java8中的StringJoiner
这篇文章主要介绍"如何使用Java8中的StringJoiner",在日常操作中,相信很多人在如何使用Java8中的StringJoiner问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"如何使用Java8中的StringJoiner"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
介绍
在实用StringJoiner类之前,如果我们想要数据最终的字符串以逗号隔开,大概是这样的
StringBuilder sb = new StringBuilder(); IntStream.range(1,10).forEach(i->{ sb.append(i+""); if( i < 10){ sb.append(",") } });如果引入StringJoiner,如何处理呢?
StringJoiner sj = new StringJoiner(","); IntStream.range(1,10).forEach(i->sj.add(i+""));看着是不是更简单直观了呢?
另外,StringJoiner类的构造函数,还可以做到可选择性地从我们自定义的前缀开始和自定义的后缀结尾,比较灵活和实用。
//值依次是分割符 , 前缀 ,后缀 StringJoiner stringJoiner = new StringJoiner(",", "[", "]"); stringJoiner.add("xiao"); stringJoiner.add("zhi"); System.out.println(stringJoiner.toString());输出结果:[xiao,zhi]
StringJoiner在处理sql拼接上面,也非常方便,如拼接 sql 的in条件的时候:
StringJoiner joiner3 = new StringJoiner("','", "'", "'"); joiner3.add("1").add("2"); //输出 : '1','2'更多实用的功能,大家可以探索。
源码
这个类的源码很简单,大家很容易就可以看明白。StringJoiner 更像一个装饰者模式,对外隐藏了StringBuilder。
不过需要注意的是 StringJoiner 并且没有处理一些基本的集合元素情况,比如加入列表的元素,更像针对Collectors而设计。
package java.util; public final class StringJoiner { private final String prefix;//前缀 private final String delimiter;//间隔符 private final String suffix;//后缀 private StringBuilder value;//值 private String emptyValue;//空值 public StringJoiner(CharSequence delimiter) { this(delimiter, "", ""); //默认前缀和后缀为"",重载调用 } public StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) { //间隔符,前缀和后缀判断是否为null,null将抛出异常 Objects.requireNonNull(prefix, "The prefix must not be null"); Objects.requireNonNull(delimiter, "The delimiter must not be null"); Objects.requireNonNull(suffix, "The suffix must not be null"); // 成员变量赋值 this.prefix = prefix.toString(); this.delimiter = delimiter.toString(); this.suffix = suffix.toString(); thisthis.emptyValue = this.prefix + this.suffix;//空值被设置为只有前后缀 } //设置空值,检查是否为null public StringJoiner setEmptyValue(CharSequence emptyValue) { this.emptyValue = Objects.requireNonNull(emptyValue, "The empty value must not be null").toString(); return this; } @Override public String toString() { if (value == null) { return emptyValue; //没有值将返回空值或者后续设置的空值 } else { if (suffix.equals("")) { return value.toString(); //后缀为""直接返回字符串,不用添加 } else { //后缀不为"",添加后缀,然后直接返回字符串,修改长度 int initialLength = value.length(); String result = value.append(suffix).toString(); // reset value to pre-append initialLength value.setLength(initialLength); return result; } } } //初始化,先添加前缀,有了之后每次先添加间隔符,StringBuilder后续append字符串 public StringJoiner add(CharSequence newElement) { prepareBuilder().append(newElement); return this; } //合并StringJoiner,注意后面StringJoiner 的前缀就不要了,后面的appen进来 public StringJoiner merge(StringJoiner other) { Objects.requireNonNull(other); if (other.value != null) { final int length = other.value.length(); // lock the length so that we can seize the data to be appended // before initiate copying to avoid interference, especially when // merge 'this' StringBuilder builder = prepareBuilder(); builder.append(other.value, other.prefix.length(), length); } return this; } //初始化,先添加前缀,添加之后每次先添加间隔符 private StringBuilder prepareBuilder() { if (value != null) { value.append(delimiter); } else { value = new StringBuilder().append(prefix); } return value; } public int length() { // Remember that we never actually append the suffix unless we return // the full (present) value or some sub-string or length of it, so that // we can add on more if we need to. //添加后缀的长度 return (value != null ? value.length() + suffix.length() : emptyValue.length()); } }到此,关于"如何使用Java8中的StringJoiner"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
后缀
前缀
实用
字符
字符串
学习
更多
元素
源码
长度
处理
帮助
输出
直观
接下来
不用
函数
功能
变量
只有
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
加强网络安全保护的照片
服务器不能关机
网络安全项目交付实施方案
河南青柚网络技术有限公司怎么样
空间数据库种类
北京网络技术排名靠前
江华网络安全宣贯
h3c 服务器哪个口进系统
什么是软件开发期
银行中网络安全的重要性
服务器每天关机还是开着好
2018年网络技术术语
怎么查看服务器有没有安装jdk
江苏箭牛网络技术有限公司怎么样
海南crm软件开发哪家好
网络安全服务的未来发展
网络安全隐患数字证书
筑牢网络安全屏障需多方发力
基因护航网络安全
软件开发意向协议书范本
服务器销售系统
软件开发营销实训报告
湖北互联网软件开发怎么样
按键精灵还原数据库
西安用的多的打车软件开发
广州海跃网络技术
数据库怎么禁止外部连接
以太网用什么网络技术好
阿文菌的服务器
中国计算机网络安全标准