StringJoiner
StringJoiner 是 Java 8 增加的拼接字符串神器。
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
可以看到,这样写十分的干净清爽,也省去了许多没有必要的分隔符拼接操作。
StringJoiner 详细介绍
StringJoiner 成员变量:
- prefix:拼接后的字符串前缀
- delimiter:拼接时的字符串分隔符
- suffix:拼接后的字符串后缀
- value:拼接后的值
- emptyValue:空值的情况,value为 null 时返回
StringJoiner 提供了两个构造方法:
- 一个必须带分隔符
- 另一个必须带分隔符、前缀、后缀
公开方法:
- setEmptyValue:设置空值
- toString:转换成 String
- add:添加字符串
- merge:从另一个 StringJoiner 合并
- length:长度(包括前缀后缀)
流式 API
StringJoiner 内部其实就是用的 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!
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦