Java8新方法String.join()详解:分隔符与元素拼接的源码分析

《Java 核心技术卷 I》原书第 10 版中,在第 51 页最下面。讲述了一个 Java8 的新方法,即 String.join(CharSequence delimiter, CharSequence... elements)。此方法会返回一个新字符串,该字符串会用给定的定界符来连接所有的元素。

Java8新方法String.join()详解:分隔符与元素拼接的源码分析

演示代码如下:

公共静态的 void 主方法(字符串数组参数 args){
        //字符串数组
String 数组 strArray 被创建,其中包含元素"ni"、"zhen"、"hao"、"kan"。
        //字符串队列
        List strList = new ArrayList();
        //添加元素
        strList.add("ni");
        strList.add("zhen");
        strList.add("hao");
        strList.add("kan");
        //第2个参数是字符串数组
使用“!”作为分隔符,将 strArray 中的元素连接起来赋值给字符串 a 。 先获取 strArray 中的元素,然后用“!”逐个连接这些元素,最后将连接后的结果赋给字符串 a 。 把 strArray 里的元素通过“!”进行拼接,得到的结果赋给字符串 a 。 以“!”为连接符,把 strArray 中的元素连接起来并赋值给字符串 a 。 利用“!”将 strArray 的元素连接起来,将连接后的字符串赋给 a 。 用“!”把 strArray 的元素逐个连接起来,然后把连接后的字符串赋给 a 。 以“!”为纽带,将 strArray 的元素连接起来并赋值给 a 。 借助“!”把 strArray 的元素连接成一个字符串,再将这个字符串赋给 a 。 把 strArray 的元素通过“!”进行串联,将串联后的字符串赋给 a 。 以“!”作为连接手段,将 strArray 的元素连接起来并赋给 a 。 利用“!”把 strArray 的元素连接在一起,将连接后的字符串赋给 a 。 借助“!”将 strArray 的元素逐个连接,将连接后的字符串赋给 a 。 以“!”为媒介,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行连接,将连接后的字符串赋给 a 。 借助“!”把 strArray 的元素连接成一个整体,将这个整体赋给 a 。 以“!”为桥梁,将 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行拼接,将拼接后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给 a 。 以“!”为方式,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行组合,将组合后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的内容赋给 a 。 以“!”为手段,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行整合,将整合后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为方法,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行联合,将联合后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的内容赋给字符串 a 。 以“!”为途径,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行贯通,将贯通后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为渠道,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行贯穿,将贯穿后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为路径,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行链接,将链接后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为纽带,把 strArray 的元素连接起来并赋给字符串 a 。 用“!”把 strArray 的元素进行联结,将联结后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为关联,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行关联,将关联后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为衔接,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行衔接,将衔接后的字符串赋给 a 。 借助“!”将 strArray 的元素连接起来,将连接后的结果赋给字符串 a 。 以“!”为关联点,把 strArray 的元素连接起来并赋给 a 。 用“!”把 strArray 的元素进行关联点连接,将关联点连接后的字符串
        //第2个参数是字符串队列
使用“!”作为分隔符,将 strList 中的元素连接起来,得到字符串 b 。
        //第1个参数之后是多个字符串
String c 是通过将 "ni"、"zhen"、"hao"、"kan" 用 "!" 连接起来得到的。
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
    }

结果如下:

ni!zhen!hao!kan
ni!zhen!hao!kan
ni!zhen!hao!kan

从结果能发现,在 String.join()方法里,其一参数为分隔符,其二参数是要拼接的元素,它可以是多个字符串,也可以是字符串数组,还可以是字符串队列。

源码分析:

String.join()方法源码:

//delimiter 分隔符
//elements 需要连接的元素
公共静态的 String 进行连接操作(分隔符为 CharSequence 类型,元素为多个 CharSequence 类型……)。
判断是否为 null,如果是 null ,就抛出 NullPointerException 。
需要确保分隔符不为 null 。
必须要求元素不能为 null 。
    //构造一个分隔符为delimiter的实例
创建了一个 StringJoiner 对象 joiner,使用指定的分隔符 delimiter 来进行字符串的连接操作。
    //循环拼接
对于每一个 CharSequence 类型的 cs,在 elements 中进行遍历。
        joiner.add(cs);
    }
    return joiner.toString();
}

StringJoiner构造器源码:

//1个参数构造器
创建一个带有指定分隔符的 StringJoiner 对象。这个分隔符用于在连接多个字符串时分隔它们。例如,如果指定的分隔符是逗号,那么在连接多个字符串时,逗号将被放置在每个字符串之间。
    //调用3个参数构造器
    this(delimiter, "", "");
}
//3个参数构造器
//delimiter 分隔符
//prefix 前缀
//suffix 后缀
创建一个字符串连接工具,它使用指定的分隔符(CharSequence 类型)来连接多个字符串。这个字符串连接工具可以方便地将多个字符串按照指定的分隔符进行拼接,形成一个新的字符串。它提供了一种简单而有效的方式来处理字符串的连接操作,特别在需要将多个字符串组合成一个字符串的情况下非常有用。
                    CharSequence prefix,
                    CharSequence suffix) {
    //判断是否为null,如果为null,抛出NullPointerException
Objects 要求非空的前缀,并且明确指出“前缀不能为 null”;如果前缀为 null ,则会抛出相应的异常;这里明确要求前缀不能为 null ,以确保后续操作的正确性。
Objects 要求非空的分隔符,并且指出分隔符不能为 null ,即 "The delimiter must not be null" 。
Objects.requireNonNull 这个方法用于确保传入的后缀(suffix)不为 null。如果后缀为 null,就会抛出一个 NullPointerException 异常,并显示指定的错误消息 "The suffix must not be null"。也就是说,在使用这个方法时,必须传入一个非 null 的后缀值,以避免出现空指针异常。
    //为成员变量赋值
    //前缀
this 的前缀被设置为前缀转换后的字符串形式。
    //分隔符
this 的分隔符等于分隔符转换为字符串后的结果。
    //后缀
this 的后缀等于后缀转换为字符串后的结果。
this.emptyValue 等于 this.prefix 加上 this.suffix ;
}

在 String.join()方法里,是借助 add 方法来拼接字符串的,add()的源码如下:

public StringJoiner 向其中添加一个字符序列新元素。
prepareBuilder()会返回参数,并且会调用 append()方法。
准备构建器。然后将新元素追加到构建器中。
    return this;
}

perpareBuilder()方法源码如下:

构建一个 StringBuilder 用于后续操作。
    if (value != null) {
        value.append(delimiter);
    } else {
使用 StringBuilder 创建一个新的对象,然后通过 append 方法将 prefix 追加到该对象中,最后将结果赋值给 value 。
    }
    return value;
}

perpareBuilder()方法的返回值是一个 StringBuilder 对象,此对象通过调用 StringBuilder.append()方法来拼接字符串。

你可能想看:
« 上一篇
下一篇 »

相关推荐

java中什么是冒泡,冒泡算法

2026年09月06日

27阅读

java中冒号,java双冒号

2026年09月06日

26阅读

java中的->,java中的是什么意思

2026年09月06日

24阅读

java中的super用法,Java中super的说明

2026年09月06日

28阅读

java中反射的应用,java中反射的应用场景

2026年09月06日

25阅读

java中开关的定义,Java关键字有哪些

2026年09月06日

25阅读