JDK8字符串拼接的正确姿势
1. 对列表中的元素进⾏拼接
以前,对⼀个列表中的字符串进⾏拼接时,常见的代码如⽰例1所⽰:
代码⽰例1
List<String> ids = ImmutableList.of("1", "2", "3");
StringBuilder sb = new StringBuilder();
for (String id : ids) {
if (sb.length() > 0) {
sb.append(",");
}
sb.append(id);
}
System.out.println(sb);
运⾏结果
1,2,3
⽰例1的代码没有问题,结果也是正确的,唯⼀的缺憾就是:代码⽐较长。
在JDK8之后,上述代码可以简化:
代码实例2
List<String> ids = ImmutableList.of("1", "2", "3");
System.out.println(String.join(",", ids));
运⾏结果
1,2,3
代码由原来的9⾏缩短到2⾏,⾮常简洁,最主要的是节省了时间(时间就是⽣命啊)。
JDK是如何实现的呢,源码如下:
public static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements) {
StringJoiner joiner = new StringJoiner(delimiter);
for (CharSequence cs: elements) {
joiner.add(cs);
}
String();
}
原来是使⽤了StringJoiner,StringJoiner是JDK8为了⽅便构造限定分隔符,甚⾄于给定前缀和后缀,⽽提供的⼀个类,⽰例代码如下:
StringJoiner sj = new StringJoiner(",","{","}");
sj.add("first").add("second").add("third");
System.out.String());
运⾏结果
{first,second,third}
结合JDK8的stream,可以拼接列表元素:
List<Integer> numbers = ImmutableList.of(1, 2, 3, 4, 5);
System.out.println(numbers.stream().map(Object::toString).collect(Collectors.joining(",")));
运⾏结
1,2,3,4,5
2. 追加字符串
在开发的过程中,经常遇到将字符串追加到已有的字段中,例如:将⽤户的⼀些数据追加到⼀个字段中。当时看到这个需求后,凭借第⼀印象,⽴即写出了如下的代码:
代码实例3
User user = new User();
StringBuilder sb = new Remark());
List<String> ids = ImmutableList.of("1", "2", "3");
for (String id : ids) {
if (sb.length() > 0) {
sb.append(",");
}
sb.append(id);
}
user.String());
System.out.println(user);
运⾏,竟然报空指针异常,⼀⼝⽼⾎喷了出来。通过异常信息,结合StringBuilder源码:
public StringBuilder(String str) {
super(str.length() + 16);
append(str);
}
oh my god,在StringBuilder初始化时,为了初始化空间的⼤⼩,取了字符串的长度。然⽽,新⽤户的remark字段是空的,取其长度,字段就报错了。
结合前⾯学习的StringJoiner,新的代码如下:
User user = new User();
字符串截取拼接不固定List<String> ids = ImmutableList.of("1", "2", "3");
StringJoiner sj = new StringJoiner(",");
if (StringUtils.Remark())) {
sj.Remark());
}
for (String id : ids) {
sj.add(id);
}
System.out.String());
运⾏结果
1,2,3
当然,如果还想再短⼀点,可以将for循环简写:
User user = new User();
List<String> ids = ImmutableList.of("1", "2", "3");
StringJoiner sj = new StringJoiner(",");
if (StringUtils.Remark())) {
sj.Remark());
}
sj.add(String.join(",", ids));
System.out.String());

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。