JAVA8之StringJoiner类

简介:

StringJoiner是Java8新出的一个类,用于构造由分隔符分隔的字符序列,并可选择性地从提供的前缀开始和以提供的后缀结尾。省的我们开发人员再次通过StringBuffer或者StingBuilder拼接。

撸代码效果:

public class Test {
    public static void main(String args[]) {
         final String prefix = "[";
         final String delimiter = ":";
         final String suffix = "]";
        StringJoiner stringJoiner = new StringJoiner(delimiter, prefix, suffix);
        stringJoiner.add("张三").add("李四").add("王五");
        System.out.println(stringJoiner.toString());
    }
}

结果:

[张三:李四:王五]

源代码解析:

1)初始化一个对象

 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;
    }

在对象中传入分隔符,前缀,后缀

2)添加元素到对象

 public StringJoiner add(CharSequence newElement) {
        prepareBuilder()
        //这里其实就是调用的StringBuilder的 append(CharSequence s)方法
        .append(newElement);
        return this;
    }
    

3)初始化前缀或添加分隔符

  private StringBuilder prepareBuilder() {
        if (value != null) {
            value.append(delimiter);
        } else {
            value = new StringBuilder().append(prefix);
        }
        return value;
    }

4)重新toString方法,添加后缀

  @Override
    public String toString() {
        if (value == null) {
            return emptyValue;
        } else {
            if (suffix.equals("")) {
                return value.toString();
            } else {
                int initialLength = value.length();
                String result = value.append(suffix).toString();
                // reset value to pre-append initialLength
                value.setLength(initialLength);
                return result;
            }
        }
    }

你可能感兴趣的:(技术问题处理回顾)