Java8 拼接字符串 StringJoiner

StringJoiner是Java8新出的一个类,用于构造由分隔符分隔的字符序列,并可选择性地从提供的前缀开始和以提供的后缀结尾。省的我们开发人员再次通过StringBuffer或者StingBuilder拼接。
我们查看一下一下代码,试着猜一下。

1.简单的字符串拼接

  输出:HelloWorld

 

2:可使用特定的分隔符或是前后缀来拼接字符串

注:当我们使用StringJoiner(CharSequence delimiter)初始化一个StringJoiner的时候,这个delimiter其实是分隔符,并不是字符串的初始值

 输出:[Hello,World]

 

3.实现原理

依赖StringBuilder实现,性能和StringBuilder差不多,同样也是非线程安全的

 

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();this.emptyValue = this.prefix + this.suffix;//空值被设置为只有前后缀}//设置空值,检查是否为nullpublic StringJoiner setEmptyValue(CharSequence emptyValue) {this.emptyValue = Objects.requireNonNull(emptyValue,"The empty value must not be null").toString();return this;}@Overridepublic 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 initialLengthvalue.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());}
}

 

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

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

相关文章

函数⑥作用域与命名空间

尽管 JavaScript 支持一对花括号创建的代码段&#xff0c;但是并不支持块级作用域&#xff1b; 而仅仅支持 函数作用域。 function test() { // 一个作用域for(var i 0; i < 10; i) { // 不是一个作用域// count}console.log(i); // 10 }注意: 如果不是在赋值语句中&#x…

分享Git常见的项目托管平台

今天给大家分享Git常见的项目托管平台&#xff0c;大家一起来看看吧&#xff01; 1、GitHub GitHub是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持Git作为唯一的版本库格式进行托管&#xff0c;故名GitHub。是全球最大、代码质量最高的Git开源项目平台。遗憾的…

【转】Java MySQL数据类型对照

Java MySQL数据类型对照 类型名称显示长度数据库类型JAVA类型JDBC类型索引(int)描述 VARCHARLNVARCHARjava.lang.String12 CHARNCHARjava.lang.String1 BLOBLNBLOBjava.lang.byte[]-4 TEXT65535VARCHARjava.lang.String-1 INTEGER4INTEGER UNSIGNEDjava.lang.Long4 …

网络技巧:教你给路由器装上电池,断电照样可以上网

家里要是停电了&#xff0c;你的WiFi还能上网吗&#xff1f;想都不用想&#xff0c;“肯定不能”估计所有人都会这样回答。如果小编跟你说即使停电了&#xff0c;也有个小方法让你能够用WiFi&#xff0c;你会相信不&#xff1f;下面大家一起来看看吧&#xff01; 其实&#xff…

电脑软件:推荐一款磁盘空间分析工具——WizTree

目录 1、WizTree是啥&#xff1f; 2、WizTree的特点 2.1 磁盘空间利用率分析 2.2 扫描速度快 2.3 支持多文件系统格式 2.4 树状图显示 2.5 大文件快速查找 2.5 支持文件名模糊搜索 2.6 支持导出文件和 MFT 数据 2.7 支持导入文件和 MFT 数据 2.8 命令行支持 3、总结…

dockerfile nginx配置

Dockerfile 代码 From hub.c.163.com/public/nginx:1.2.1 RUN rm -v /etc/nginx/nginx.confADD nginx.conf /etc/nginx/RUN echo "daemon off;" >> /etc/nginx/nginx.conf RUN chown -R www-data:www-data /var/lib/nginxRUN mkdir -p /usr/src/node-app RUN m…

分布式自增ID算法---雪花算法(SnowFlake)Java实现

分布式id生成算法的有很多种&#xff0c;Twitter的SnowFlake就是其中经典的一种。 算法原理 SnowFlake算法生成id的结果是一个64bit大小的整数&#xff0c;它的结构如下图&#xff1a; 1bit&#xff0c;不用&#xff0c;因为二进制中最高位是符号位&#xff0c;1表示负数&…

软件:给大家推荐一款国产非常好用的效率软件uTools

目录 1、uTools介绍 2、安装下载 3、uTools常用功能介绍 今天给大家推荐一款办公人员必备的效率软件uTools,可以大幅度提升你的生产力&#xff0c;感兴趣的朋友可以下载试一试&#xff0c;相信你一定会爱不释手。 1、uTools介绍 uTools是一款插件化&#xff0c;极简、跨平…

iOS Coding项目片段记录(八)

继续一些小知识点&#xff0c;想起来就贴出来。 监测网络状态1.主动监测监测网络状态是否WIFI (BOOL)isEnableWIFI {return ([[Reachability reachabilityForLocalWiFi] currentReachabilityStatus] ! NotReachable);}是否3G (BOOL)isEnable3G {return ([[Reachability reachab…

数据库知识:SQLServer创建非sa用户笔记

数据库安全是数据库运维非常重要的环节&#xff0c;今天给大家分享SQLServer如何创建非sa用户&#xff0c;并且设置数据库对应的访问权限&#xff0c;希望对大家能有所帮助&#xff01; 1、创建登录名 1.1、创建登录名 安全性→登录名→新建登录名&#xff08;鼠标右键&#xf…

start() 跟 run() 方法的区别和联系

这里还有个知识点是 start() 跟 run() 方法的区别和联系。 直接调用 start() 方法&#xff0c;此时线程处于一个就绪&#xff08;可运行&#xff09;的状态&#xff0c;但是并没有真正的运行。而是得到CPU 的时间片后&#xff0c;开始执行 run() 方法&#xff0c;run() 方法里…

四维偏序 CDQ套CDQ

对CDQ深一步的理解 昨天做了一道CDQ,看了一堆CDQ可做的题,今天又做了一道四维偏序 感觉对CDQ的理解又深了一点,故来写一写现在自己对于CDQ的理解 CDQ其实就是实现了这样的一个问题的转化:\(a_{l} < a_{l1} < ... < a_r > (a_l,a_{l1},...,a_{mid}) \text{都小于} (…

微软电脑管家2.0公测版体验

前言 微软电脑管家2.0公测版本终于发布了&#xff0c;之前给大家分享过微软电脑管家测试版的文章&#xff0c;今天给大家再介绍一下微软电脑管家2.0公测版究竟带来了哪些更新&#xff0c;大家一起来看看吧&#xff01; 安装要求 微软官方公布的安装要求是windows10的1809版本…

布隆过滤器(Bloom Filter)的原理和实现

布隆过滤器使用场景 之前在《数学之美》里面看到过布隆过滤器的介绍。那么什么场景下面需要使用布隆过滤器呢&#xff1f; 看下下面几个问题 字处理软件中&#xff0c;需要检查一个英语单词是否拼写正确在 FBI&#xff0c;一个嫌疑人的名字是否已经在嫌疑名单上在网络爬虫里&a…

硬件知识:RTMP和RTSP传统流媒体协议介绍

今天给大家分享RTMP和RTSP传统流媒体协议介绍&#xff0c;希望对大家能有所帮助&#xff01; 1、RTSP 1.1 RTSP协议介绍 RTSP &#xff08;Real-Time Stream Protocol&#xff09;由Real Networks 和 Netscape共同提出的&#xff0c;基于文本的多媒体播放控制协议。RTSP定义…

常见Java面试题

一、Java基础 1、Arrays.sort实现原理和Collections.sort实现原理 答&#xff1a;Collections.sort方法底层会调用Arrays.sort方法&#xff0c;底层实现都是TimeSort实现的。TimSort算法就是找到已经排好序数据的子序列&#xff0c;然后对剩余部分排序&#xff0c;然后合并起…

电脑知识:台式电脑应该选择品牌和组装,值得收藏

互联网时代的发展&#xff0c;电脑对大家日常办公、游戏、影音娱乐都是常用的设备。今天主要给大家分享一下购买台式电脑应该注重品牌还是组装&#xff0c;相信看完本文对你选购台式电脑提供更多的参考。 1、品牌电脑 品牌电脑就是由大品牌电脑厂商&#xff08;联想、IBM、戴…

Atitit it行业图像处理行业软件行业感到到迷茫的三大原因和解决方案

Atitit it行业图像处理行业软件行业感到到迷茫的三大原因和解决方案 1. 迷茫的原因最大原因是未知1 1.1. 我在哪里&#xff1f;&#xff1f;自己的定位&#xff0c;1 1.2. 正确方向是什么&#xff1f;&#xff1f;1 1.3. 虽然找到方向&#xff0c;但前面一片迷雾&#xff0c;迷…