Java中的StringJoiner类使用示例深入详解
作者:修己xj
引言
在Java编程中,字符串的拼接是一个常见的操作。Java提供了多种方法来实现字符串拼接,其中之一就是StringJoiner类。本文将详细介绍StringJoiner
的用法和功能。
StringJoiner简介
StringJoiner
是Java 8引入的一个用于拼接字符串的工具类。它允许我们以指定的分隔符将一组字符串连接成一个单独的字符串。我们可以在其源码中看到一个熟悉的身影StringBuilder
,它是基于StringBuilder
实现字符串操作的,所以它的性能和StringBuilder
是差不多的,它也是非线程安全的。
以下是关于StringJoiner
构造方法和属性的源码:
package java.util; public final class StringJoiner { private final String prefix; private final String delimiter; private final String suffix; private StringBuilder value; private String emptyValue; public StringJoiner(CharSequence delimiter) { this(delimiter, "", ""); } public StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix) { Objects.requireNonNull(prefix, "The prefix must not be null"); Objects.requireNonNull(delimiter, "The delimiter must not be null"); Objects.requireNonNull(suffix, "The suffix must not be null"); // make defensive copies of arguments this.prefix = prefix.toString(); this.delimiter = delimiter.toString(); this.suffix = suffix.toString(); this.emptyValue = this.prefix + this.suffix; } }
字段说明:
prefix:这是一个私有字段,表示拼接后的字符串的前缀部分。在构造函数中通过传递参数指定,如果未提供则默认为空字符串。
delimiter:这是一个私有字段,表示拼接字符串时使用的分隔符。同样,它在构造函数中通过参数传递,如果未提供则默认为空字符串。
suffix:这是一个私有字段,表示拼接后的字符串的后缀部分。同样,它在构造函数中通过参数传递,如果未提供则默认为空字符串。
value:这是一个私有字段,它是一个StringBuilder对象,用于存储实际的拼接结果。
emptyValue:这是一个私有字段,用于存储拼接结果为空时的默认值,即前缀和后缀的组合。这个值在构造函数中初始化。
构造函数详解:
- StringJoiner(CharSequence delimiter)
这个构造函数接受一个CharSequence类型的参数delimiter,它表示拼接字符串时要使用的分隔符。前缀和后缀默认为空字符串。
- StringJoiner(CharSequence delimiter, CharSequence prefix, CharSequence suffix)
这个构造函数接受三个CharSequence类型的参数,分别是分隔符delimiter
、前缀prefix
和后缀suffix
。这个构造函数允许您自定义拼接结果的格式。在构造函数内部,会检查这些参数是否为null,并将它们转换为字符串形式保存在相应的字段中。同时,也会初始化emptyValue字段为前缀和后缀的组合。
add()方法
add()
方法是StringJoiner
类最重要的方法之一。add()
方法用于将元素添加到StringJoiner
对象中。这个方法用于将一个新元素(newElement)添加到StringJoiner
对象中,并返回StringJoiner对象本身(支持链式调用)。源码如下:
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; }
示例代码:
public static void main(String[] args) { StringJoiner stringJoiner = new StringJoiner(",","[","]"); stringJoiner.add("x") .add("j"); StringJoiner stringJoiner1 = new StringJoiner(",","(",")"); stringJoiner1.add("x1").add("j1"); System.out.println(stringJoiner.toString()); System.out.println(stringJoiner1.toString()); System.out.println(stringJoiner1.merge(stringJoiner).toString()); System.out.println(stringJoiner1.toString()); System.out.println(stringJoiner.merge(stringJoiner1).toString()); }
输出结果:
[x,j]
(x1,j1)
(x1,j1,x,j)
(x1,j1,x,j)
[x,j,x1,j1,x,j]
stream中的应用
有些家人们可能会说,如果我需要把集合 List<String> list 中的字符串使用,
拼接的话可以直接借助stream实现
list.stream().collect(Collectors.joining(","));
我们可以看下Collectors.joining(",")
的源码就可以发现,他就是借助StringJoiner
实现的,源码如下:
public static Collector<CharSequence, ?, String> joining(CharSequence delimiter) { return joining(delimiter, "", ""); } public static Collector<CharSequence, ?, String> joining(CharSequence delimiter, CharSequence prefix, CharSequence suffix) { return new CollectorImpl<>( () -> new StringJoiner(delimiter, prefix, suffix), StringJoiner::add, StringJoiner::merge, StringJoiner::toString, CH_NOID); }
总结
StringJoiner
是一个方便的工具类,用于将字符串连接在一起。- 它提供了灵活的配置选项,适用于各种字符串拼接需求。
- 希望本文能够帮助您更好地理解和使用Java中的
StringJoiner
类。通过它,您可以更轻松地处理字符串拼接操作,提高代码的可读性和可维护性。
以上就是Java中的StringJoiner类使用示例深入详解的详细内容,更多关于Java StringJoiner类的资料请关注脚本之家其它相关文章!