先看列子:
List names=new ArrayList();
names.add(“1”);
names.add(“2”);
names.add(“3”);
System.out.println(String.join("-", names));
String[] arrStr=new String[]{“a”,“b”,“c”};
System.out.println(String.join("-", arrStr));
输出:
1-2-3
a-b-c
再看String.join()方法源码:
数组方式:
public static String join(CharSequence delimiter, CharSequence... elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
// Number of elements not likely worth Arrays.stream overhead.
StringJoiner joiner = new StringJoiner(delimiter);
for (CharSequence cs: elements) {
joiner.add(cs);
}
return joiner.toString();
}
集合方式
public static String join(CharSequence delimiter,
Iterable<? extends CharSequence> elements) {
Objects.requireNonNull(delimiter);
Objects.requireNonNull(elements);
StringJoiner joiner = new StringJoiner(delimiter);
for (CharSequence cs: elements) {
joiner.add(cs);
}
return joiner.toString();
}
StringJoiner构造器源码:
//1个参数构造器
public StringJoiner(CharSequence delimiter) {
//调用3个参数构造器
this(delimiter, "", "");
}
//3个参数构造器
//delimiter 分隔符
//prefix 前缀
//suffix 后缀
public StringJoiner(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix) {
//判断是否为null,如果为null,抛出NullPointerException
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");
//为成员变量赋值
//前缀
this.prefix = prefix.toString();
//分隔符
this.delimiter = delimiter.toString();
//后缀
this.suffix = suffix.toString();
this.emptyValue = this.prefix + this.suffix;
}
String.join()方法中是通过add方法拼接字符串的,add()源码如下:
扫描二维码关注公众号,回复:
9695230 查看本文章
public StringJoiner add(CharSequence newElement) {
//prepareBuilder()返回参数,调用append()方法
prepareBuilder().append(newElement);
return this;
}
perpareBuilder()方法源码如下:
private StringBuilder prepareBuilder() {
if (value != null) {
value.append(delimiter);
} else {
value = new StringBuilder().append(prefix);
}
return value;
}
perpareBuilder()方法返回值是一个StringBuilder对象,通过调用StringBuilder.append()方法拼接字符串。