学习使用StringJoiner类(在Java 8中引入)以不同方式连接字符串。我们可以使用它用分隔符连接字符串,并在最终字符串周围使用前缀和/或后缀字符

1.创建StringJoiner

我们可以通过两种方式创建StringJoiner实例。第一个构造函数仅采用分隔符,第二个构造函数采用附加的前缀和后缀字符串。

String DELIMITER = ","; String PREFIX = "["; String SUFFIX = "]"; StringJoiner stringJoinerWithDelimiter = new StringJoiner(DELIMITER); StringJoiner stringJoinerWithPrefixSuffix = new StringJoiner(DELIMITER, PREFIX, SUFFIX); 

我们不能传递NULL参数,它们将导致NullPointerException。

Assertions.assertThrows(NullPointerException.class, () -> { new StringJoiner(null); }); 

默认情况下,如果我们不向连接器添加任何字符串,它将返回默认的空字符串。空字符串取决于用于创建StringJoiner实例的构造函数。

  • 如果仅使用分隔符,则默认值为空字符串。
  • 如果使用了 prefix 和 suffix ,则默认值为prefix + suffix连接的字符串。
Assertions.assertEquals("", stringJoinerWithDelimiter.toString()); Assertions.assertEquals("[]", stringJoinerWithPrefixSuffix.toString()); 

我们可以使用setEmptyValue()方法更改默认字符串。

stringJoinerWithDelimiter.setEmptyValue("BLANK"); Assertions.assertEquals("BLANK", stringJoinerWithDelimiter.toString()); 

默认前缀和后缀值为空字符串。

3. 添加字符串

我们可以使用StringJoiner.add()方法来添加需要连接的字符串。

stringJoinerWithDelimiter.add("alex"); stringJoinerWithDelimiter.add("brian"); stringJoinerWithDelimiter.add("charles"); Assertions.assertEquals("alex,brian,charles", stringJoinerWithDelimiter.toString()); 

如果已使用前缀和后缀,则最终字符串将包含附加的前缀和后缀。

stringJoinerWithPrefixSuffix.add("alex"); stringJoinerWithPrefixSuffix.add("brian"); stringJoinerWithPrefixSuffix.add("charles"); Assertions.assertEquals("[alex,brian,charles]", stringJoinerWithPrefixSuffix.toString()); 

4. 合并StringJoiner实例

应用程序的两个部分可能连接了字符串,现在需要将它们组合起来。使用StringJoiner.merge()方法合并两个实例StringJoiner以生成单个结果。

当我们使用joiner1.merge(joiner2)合并两个连接器时–

  • joiner2的内容附加到joiner1。
  • 前缀和后缀用于joiner1。
  • 两个连接器都保留其分隔符。

让我们通过一个例子来理解合并过程。在下面的 Java 程序中,我们创建两个具有不同分隔符、前缀和后缀的 StringJoiner对象。合并的StringJoiner具有来自第一个连接器的前缀和后缀以及来自两个连接器的分隔符。

StringJoiner joiner1 = new StringJoiner(",", "[", "]"); StringJoiner joiner2 = new StringJoiner("-", "{", "}"); joiner1.add("a"); joiner1.add("b"); joiner2.add("1"); joiner2.add("2"); StringJoiner finalJoiner = joiner1.merge(joiner2); Assertions.assertEquals("[a,b,1-2]", finalJoiner.toString()); 

5. Collectors.joining()中的StringJoiner

Collectors.joining () API 是 Java 8 Streams 的一部分。它连接字符串流(或基元流及其字符串值)。Collectors.joining ()内部使用StringJoiner类。

String result = Stream.of("a", "b", "c").collect(Collectors.joining(",", "[", "]")); Assertions.assertEquals("[a,b,c]", result); 

6. StringJoiner和StringBuilder的区别

使用StringBuilder,我们将以备用顺序附加每个字符串和分隔符。

StringBuilder builder = new StringBuilder(); String result = builder.append("a").append(",").append("b").append(",").append("c").toString(); 

在构造函数中使用带有分隔符的StringJoiner,我们只需要关注要添加的字符串。分隔符将自动添加。

stringJoinerWithDelimiter.add("a").add("b").add("c"); 

总的来说,与StringBuilder相比,StringJoiner使连接字符串变得容易。

七、结论

在本Java 8 StringJoiner教程中,我们学习了使用构造函数创建StringJoiner并将其与另一个StringJoiner实例合并。我们学习了仅使用分隔符以及前缀和后缀字符串来连接字符串。我们还了解了如何通过Collectors.joining()方法在Stream API中使用StringJoiner。

总的来说,StringJoiner很像StringBuilder和StringBuffer类,但具有更强大的 API 用于添加分隔字符串,但它不适合其他格式化任务。