专栏名称: HollisChuang
Developer
目录
相关文章推荐
生态梦网  ·  力争年底前营业!滨海北部片区商业新地标来了 ·  3 小时前  
山西广播电视台  ·  不满物业?电话来了→ ·  昨天  
山西广播电视台  ·  不满物业?电话来了→ ·  昨天  
天津广播  ·  城事 | 天津这里将建体育中心!项目公示! ·  3 天前  
天津广播  ·  城事 | 天津这里将建体育中心!项目公示! ·  3 天前  
51好读  ›  专栏  ›  HollisChuang

Java 8中字符串拼接新姿势:StringJoiner

HollisChuang  · 掘金  ·  · 2019-03-07 03:14

正文

阅读 567

Java 8中字符串拼接新姿势:StringJoiner

GitHub 1.3k Star 的 Java工程师成神之路 ,不来了解一下吗?

为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接 一文中,我们介绍了几种Java中字符串拼接的方式,以及优缺点。其中还有一个重要的拼接方式我没有介绍,那就是Java 8中提供的StringJoiner ,本文就来介绍一下这个字符串拼接的新兵。

如果你想知道一共有多少种方法可以进行字符串拼接,教你一个简单的办法,在Intellij IDEA中,定义一个Java Bean,然后尝试使用快捷键自动生成一个toString方法,IDEA会提示多种toString生成策略可供选择。

目前我使用的IDEA的toString生成策略默认的是使用JDK 1.8提供的StringJoiner。

介绍

StringJoiner是java.util包中的一个类,用于构造一个由分隔符分隔的字符序列(可选),并且可以从提供的前缀开始并以提供的后缀结尾。虽然这也可以在StringBuilder类的帮助下在每个字符串之后附加分隔符,但StringJoiner提供了简单的方法来实现,而无需编写大量代码。

StringJoiner类共有2个构造函数,5个公有方法。其中最常用的方法就是add方法和toString方法,类似于StringBuilder中的append方法和toString方法。

用法

StringJoiner的用法比较简单,下面的代码中,我们使用StringJoiner进行了字符串拼接。

public class StringJoinerTest {

    public static void main(String[] args) {
        StringJoiner sj = new StringJoiner("Hollis");

        sj.add("hollischuang");
        sj.add("Java干货");
        System.out.println(sj.toString());

        StringJoiner sj1 = new StringJoiner(":","[","]");

        sj1.add("Hollis").add("hollischuang").add("Java干货");
        System.out.println(sj1.toString());
    }
}
复制代码

以上代码输出结果:

hollischuangHollisJava干货
[Hollis:hollischuang:Java干货]
复制代码

值得注意的是,当我们 StringJoiner(CharSequence delimiter) 初始化一个 StringJoiner 的时候,这个 delimiter 其实是分隔符,并不是可变字符串的初始值。

StringJoiner(CharSequence delimiter,CharSequence prefix,CharSequence suffix) 的第二个和第三个参数分别是拼接后的字符串的前缀和后缀。

原理

介绍了简单的用法之后,我们再来看看这个StringJoiner的原理,看看他到底是如何实现的。主要看一下add方法:

public StringJoiner add(CharSequence newElement) {
    prepareBuilder().append(newElement);
    return this;
}

private StringBuilder prepareBuilder() {
    if (value != null) {
        value.append(delimiter);
    } else {
        value = new StringBuilder().append(prefix);
    }
    return value;
}
复制代码

看到了一个熟悉的身影——StringBuilder ,没错,StringJoiner其实就是依赖StringBuilder实现的,在 为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接 中我们介绍过StringBuilder的实现原理,本文不在赘述。







请到「今天看啥」查看全文