StringJoiner源码学习
时间:2022-07-24
本文章向大家介绍StringJoiner源码学习,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在阅读源码的时候发现了一个类StringJoiner,因为之前也没用过。感觉应该是字符串拼接的工具类。
看到其中有几个变量。主要是前后缀和空字符串等。
public StringJoiner(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix) {
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();
//设置空value
this.emptyValue = this.prefix + this.suffix;
}
在添加的方法中
public StringJoiner add(CharSequence newElement) {
prepareBuilder().append(newElement);
return this;
}
//创建一个stringBuilder
private StringBuilder prepareBuilder() {
if (value != null) {
//追加到在value之后添加一个分隔符
value.append(delimiter);
} else {
//创建value,然后添加一个前缀
value = new StringBuilder().append(prefix);
}
return value;
}
在toString()方法中:
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;
}
}
}
代码看到这里,基本已经没了。其中的方法merge()应该是定制的工具。那么我们本地测试一下代码看看这个效果。我们看到add方法接受的参数是CharSequence,我们通过向上查阅,发现这个CharSequence是String的一个接口。也就是说与String相关的都可以做为参数传递进去。包括StringBuilder等。
public class TestStringJoin {
public static void main(String[] args) {
StringJoiner stringJoiner=new StringJoiner(",","1 "," 2");
stringJoiner.add("程序员记事本").add("test");
System.out.println(stringJoiner.toString());
}
}
有了此工具,您还在为类似url的参数拼接感到烦恼吗?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Salesforce LWC学习(十九) 针对 lightning-input-field的label值重写
- MySQL定时备份方案
- Nginx多方面调优策略
- 太厉害了!这应该是目前Redis可视化工具最全的横向评测
- pip install时timeout设置
- 聊聊dubbo-go的TpsLimitFilter
- 聊聊dubbo-go的TokenFilter
- 你这磨人的小妖精——选中文本并标注的实现过程
- VUE跨页面传值的精妙
- 一文解决如何提取TCGA配对表达矩阵
- CSS中的伪类选择器、颜色、度量单位、文本字体及文本样式设置
- CSS盒模型、边框和背景、表格和列表、颜色和透明度、阴影和轮廓及长度单位rem
- C++核心准则CP.110:不要自已为初始化编写双重检查锁定代码
- BOSS直聘招聘信息获取之爬虫程序数据处理
- BOSS直聘招聘信息获取之爬虫程序分析