实战小技巧4:优雅的实现字符串拼接

简介: 相信没有小伙伴没有写过这样的代码,比如说现在让我们来实现一个字符串拼接的场景,怎样的实现才算是优雅的呢?以将int数组转为英文逗号分隔的字符串为例进行演示

每天一个实战小技巧,字符串拼接


相信没有小伙伴没有写过这样的代码,比如说现在让我们来实现一个字符串拼接的场景,怎样的实现才算是优雅的呢?


以将int数组转为英文逗号分隔的字符串为例进行演示


1. 普通写法


直接使用StringBuilder来拼接

public String join(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    for(Integer sub: list) {
        builder.append(sub).append(",");
    }
    return builder.substring(0, builder.length() - 1);
}
复制代码


上面这种写法相信比较常见,相对来说不太顺眼的地方就是最后的toString,需要将最后的一个英文逗号给干掉


当然也可以用下面这种事前判断方式,避免最终的字符串截取

public String join2(List<Integer> list) {
    StringBuilder builder = new StringBuilder();
    boolean first = true;
    for (Integer sub: list) {
        if (first) {
            first = false;
        } else {
            builder.append(",");
        }
        builder.append(sub);
    }
    return builder.toString();
}
复制代码


2. StringJoiner



上面实现中,干掉最后的一个分隔符实在不是很优雅,那么有更好一点的用法么,接下来看一下使用StringJoiner的方式


public String join3(List<Integer> list) {
    StringJoiner joiner = new StringJoiner(",");
    for (Integer s : list) {
        joiner.add(String.valueOf(s));
    }
    return joiner.toString();
}
复制代码


StringJoiner由jdk1.8提供,除了上面的基础玩法之外,结合jdk1.8带来的流操作方式,可以更简洁的实现


return list.stream().map(String::valueOf).collect(Collectors.joining(","));
复制代码

怎么样,上面这个实现比起前面的代码是不是要简洁多了,一行代码完事


3. guava joiner



如果使用的jdk还不是1.8版本,不能使用上面的StringJoiner,没关系,还有guava的Joiner也可以实现


public String join5(List<Integer> list) {
    return Joiner.on(",").join(list);
}
复制代码


注意


  • 接收的参数类型为: 数组/Iterable/Iterator/可变参数, 基本上可以覆盖我们日常的业务场景


4. 小结



本篇文章的主题是一个非常非常常见的字符串拼接,一般来讲,我们在做字符串拼接时,最麻烦的事情就是分隔符的处理,要么就是分隔符前置添加,每次循环都需要判断是否为开头;要么就是后置,最后取字符串时,干掉最后一个分隔符


本文提供了一个非常使用的方式StringJoiner,完全解决了上面的分隔符问题,它的使用有两种场景


  • 简单的容器转String:直接借助Stream的Collectors.joining来实现
  • for循环 (这种场景一般是for循环内的逻辑不仅仅包括字符串拼接,还包括其他的业务逻辑): 循环内直接执行stringJoiner.add()添加


对于jdk1.8及以上的版本,优先推荐使用上面说的StringJoiner来实现字符串拼接;至于jdk1.8之下,那么Guava就是一个不错的选择了,使用姿势也很很简单



相关文章
|
SQL 安全 Java
【面试题精讲】字符串拼接用_+_还是_StringBuilder_?
【面试题精讲】字符串拼接用_+_还是_StringBuilder_?
|
4月前
|
JavaScript 前端开发
JavaScript中使用模板字符串拼接和使用字符串拼接有什么区别?
JavaScript中使用模板字符串拼接和使用字符串拼接有什么区别?
|
7月前
|
Python
Python语言中如何实现字符串拼接?
通过使用加号运算符,你可以将两个或多个字符串拼接成一个新的字符串。在这个示例中,`str1` 和 `str2` 字符串被拼接为 `"Hello, world!"`。这是Python中一种简单常用的字符串拼接方式。
73 1
|
7月前
|
Python
怎么理解python中的拼接字符串和分割字符串
怎么理解python中的拼接字符串和分割字符串
76 0
|
Java 程序员 C语言
由浅入深C系列六:C中实现字符串trim的功能
由浅入深C系列六:C中实现字符串trim的功能
LeetcodeSQL入门——知识点总结(选择/排序/修改/字符串处理/正则)
LeetcodeSQL入门——知识点总结(选择/排序/修改/字符串处理/正则)
|
开发者 索引 Python
字符串操作|学习笔记
快速学习字符串操作
字符串操作|学习笔记
|
人工智能 C#
C# 字符串拼接
除了可以通过加号来拼接字符串之外,我们还可以使用格式化字符串的方法来拼接字符串。中,字符串没有相加的数学运算,但它可以通过加号。是唯一可以用于字符串运算的算数运算符,别的。这样也可以实现字符串的拼接。也可以和复合赋值运算符。
143 0
C# 字符串拼接
|
Java
java学习第十天笔记-字符串193-stringbuilder基本使用3-拼接字符串
java学习第十天笔记-字符串193-stringbuilder基本使用3-拼接字符串
90 0
java学习第十天笔记-字符串193-stringbuilder基本使用3-拼接字符串
|
Java
java学习第十天笔记-字符串196-字符串拼接的底层原理
java学习第十天笔记-字符串196-字符串拼接的底层原理
82 0
java学习第十天笔记-字符串196-字符串拼接的底层原理