Java StringJoiner类用法详解
学习使用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 用于添加分隔字符串,但它不适合其他格式化任务。