Java8 对字符串连接的改进

一,需求

我们提出一个需求:有一个 List<String>,将其格式化为 元素1, 元素2, 元素3, … 元素N 的字符串形式。

毋庸置疑,Java8 之前我们的第一反应是使用 StringBuilder。

二,实现

1,使用 StringBuilder

StringBuilder sb = new StringBuilder();
List<String> list = Collections.singletonList("1,2,3,4");
for (String str : list) {
    sb.append(str).append(",");
}
System.out.println(sb.toString().substring(0, sb.toString().length() - 1));

2,使用 StringJoiner

JDK1.8 时,添加了一个新的用于字符串连接的类,专门用于这种需要 分隔符 的场合,它就是 StringJoiner。StringJoiner 在构造时可以指定一个分隔符(delimiter),然后每连接一个元素它便会加上一个 delimiter。

StringJoiner sj = new StringJoiner(",");
List<String> list = Collections.singletonList("1,2,3,4");
for (String str : list) {
    sj.add(str);
}
System.out.println(sj.toString());

3,使用 String的 join 方法

 JDK1.8 为 String 类添加了一个新的静态方法,String.join

List<String> list = Collections.singletonList("1,2,3,4");
String join = String.join(",", list);
System.out.println(join);

String.join 方法的功能内部是通过 StringJoiner 来实现的,String.join (CharSequence, Iterable) 的源码

但是我们看到了 String.join 方法的不足 —— 它不能指定前缀和后缀 —— 比如我们如果想要直接将 List<String> 格式化为 { 元素1, 元素2, 元素3, … 元素N } 呢?(此时前缀为 "{ ",后缀为 " }")

查看 StringJoiner 的构造方法,发现 StringJoiner 除了指定 分隔符 的构造方法,还有一个可以指定 分隔符、前缀和后缀 的构造方法:

4,使用 Collectors.joining

Java8 对于字符串集合的连接操作提供了一个专门的流式 API,即 Collectors.joining 函数:!

List<String> list = Collections.singletonList("1,2,3,4");
String collect = list.stream().collect(Collectors.joining(","));
System.out.println(collect);

当然也是支持前后缀的

List<String> list = Collections.singletonList("1,2,3,4");
String collect = list.stream().collect(Collectors.joining(",", "(", ")"));
System.out.println(collect2);
发布了162 篇原创文章 · 获赞 47 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/echizao1839/article/details/102795933