如何使用Java8中的StringJoiner
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍"如何使用Java8中的StringJoiner",在日常操作中,相信很多人在如何使用Java8中的StringJoiner问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法
千家信息网最后更新 2025年02月03日如何使用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安全错误
数据库的锁怎样保障安全
暗178数据库
北京1u服务器机箱工厂
云服务器租用哪家好
黑入数据库追踪ip
怎样判断存储服务器有没有打开
杀手6无法连接服务器
无线蓝牙耳机软件开发工程师
家里无线网络安全性
上海管理软件开发服务费
网络安全怎么画手抄报图片
病毒 利好网络安全
收音机下载软件开发
数据库什么时候用中括号
金华工业软件开发计划
潍坊直播软件开发解决方案
数据库开发的好处
大连艾溜达网络技术公司
江苏昆山五金行业erp软件开发
软件开发公司内幕
数据库原理及应用知识整理
网络安全手抄报带子
商标数据库技术分析
网络安全结课论文3000字
软件开发实习生(认证方向)
gomdb数据库
山西网络设置服务器无响应时间
软件开发模式
工业网络技术的优点
收音机下载软件开发
湖湘杯网络安全技能