Java String.join() 方法

2025年03月24日 | 阅读 5 分钟

Java String 类 join() 方法使用给定的分隔符连接字符串。在 String join() 方法中,分隔符会为每个元素复制。join() 方法自 JDK 1.8 起包含在 Java 字符串中。

Java String 类中有两种 join() 方法。

签名

join() 方法的签名或语法如下所示

这两种版本都会生成一个新字符串,其中给定的分隔符分隔每个部分。需要注意的是,分隔符会出现在生成字符串的开头和结尾,以及每对相邻组件之间。此外,根据 Java 文档,如果元素或分隔符为 null,则会抛出 NullPointerException。

参数

delimiter : 将添加到每个元素的字符值

elements : 将附加到分隔符的字符值

返回值

带分隔符的连接字符串

异常抛出

NullPointerException:如果元素或分隔符为 null。

自从 (Since)

1.8

内部实现

Java String.join() 方法示例

示例

编译并运行

输出

welcome-to-TpointTech

说明

代码 String.join("-", "Welcome", "to", "TpointTech") 使用了 Java String 类中 JDK 1.8 引入的静态 join() 方法。它将提供的字符串 ("Welcome", "to", "TpointTech") 连接起来,并在它们之间使用指定的分隔符 "-"。因此,输出字符串将是 "Welcome-to-TpointTech"。

Java String.join() 方法示例 2

我们可以使用分隔符来格式化字符串,就像在下面的示例中展示日期和时间一样。

示例

编译并运行

输出

25/06/2018 12:10:10

说明

在 StringJoinExample2 类的 main 方法中,使用 String.join() 函数创建了两个字符串。首先,通过将字符串 "25"、"06" 和 "2018" 与分隔符 "/" 连接起来,创建了字符串 "date"。结果是 "25/06/2018"。然后使用 System.out.print() 打印此字符串。当使用第二个字符串 "time" 时,通过将 "12"、"10" 和 "10" 与 ":" 作为分隔符连接起来,得到 "12:10:10"。然后使用 System.out.println() 打印此字符串,不加停顿地附加到前面的输出。

Java String.join() 方法示例 3

在使用 null 作为分隔符的情况下,我们会得到 null 指针异常。以下示例对此进行了确认。

示例

编译并运行

输出

Exception in thread "main" java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:221)
	at java.base/java.lang.String.join(String.java:2393)
	at StringJoinExample3.main(StringJoinExample3.java:7)

说明

在 StringJoinExample3 类的 main() 函数执行期间,第 7 行发生了 NullPointerException。该错误是由于将 null 作为分隔符参数传递给了 String.join() 方法而引起的,这是不允许的。由于 String.join() 方法需要一个非 null 的分隔符值,因此当遇到 null 分隔符时会抛出 NullPointerException。为了解决这个问题,应该将非 null 分隔符(例如空字符串 ("") 或任何其他合适的字符序列)作为第一个参数传递给 String.join() 方法。

然而,如果必须附加到分隔符的元素是 *null*,那么就会出现歧义。这是因为存在两种 join() 方法,并且 *null* 对于这两种类型的 join() 方法都是可以接受的。请观察以下示例。

示例

编译并运行

输出

/StringJoinExample4.java:7: error: reference to join is ambiguous
str = String.join("India", null);
            ^
  both method join(CharSequence,CharSequence...) in String and method join(CharSequence,Iterable<? extends CharSequence>) in String match
/StringJoinExample4.java:7: warning: non-varargs call of varargs method with inexact argument type for last parameter;
str = String.join("India", null);
                           ^
  cast to CharSequence for a varargs call
  cast to CharSequence[] for a non-varargs call and to suppress this warning
1 error
1 warning

Java String join() 方法示例 4

如果必须附加到分隔符的元素包含一些字符串,其中一些是 null,那么 null 元素将被视为普通字符串,我们不会收到任何异常或错误。让我们通过一个例子来理解这一点。

示例

编译并运行

输出

null- wake up - eat - write content for Tpoint - eat - sleep

说明

StringJoinExample5 类的 main 函数初始化 String 变量 str 为 null。然后,它使用 String.join() 方法将多个字符串与作为分隔符的 "-" 连接起来。String.join() 方法将其中一个元素视为普通字符串,即使它是 null,从而避免了 NullPointerException。通过连接所有提供的字符串(包括 null 元素),并用 "-" 分隔,得到最终字符串。因此,程序输出将是 "null-wake up-eat-write content for JTP-eat-sleep"。此行为表明 String.join() 在连接过程中将 null 元素视为普通字符串。