1. 程式人生 > 實用技巧 >工具類系列---【java8新特性-字串拼接工具StringJoiner類】

工具類系列---【java8新特性-字串拼接工具StringJoiner類】

前言:

StringJoiner是Java8新出的一個類,用於構造由分隔符分隔的字元序列,並可選擇性地從提供的字首開始和以提供的字尾結尾。省的我們開發人員再次通過StringBuffer或者StingBuilder拼接。

用法示例:

StringJoiner sj = new StringJoiner(":", "[", "]");
sj.add("hu").add("jun").add("wei");
String desiredString = sj.toString();

輸出結果:

[hu:jun:wei]

原始碼分析:

    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; } } } 初始化,先新增字首,有了之後每次先新增間隔符,StringBuilder後續append字串 public StringJoiner add(CharSequence newElement) { prepareBuilder().append(newElement);
return this; } //合併StringJoiner,注意後面StringJoiner 的字首就不要了,後面的appen進來 public StringJoiner merge(StringJoiner other) { Objects.requireNonNull(other); if (other.value != null) { final int length = other.value.length(); // lock the length so that we can seize the data to be appended // before initiate copying to avoid interference, especially when // merge 'this' StringBuilder builder = prepareBuilder(); builder.append(other.value, other.prefix.length(), length); } return this; } //初始化,先新增字首,有了之後每次先新增間隔符 private StringBuilder prepareBuilder() { if (value != null) { value.append(delimiter); } else { value = new StringBuilder().append(prefix); } return value; } public int length() { // Remember that we never actually append the suffix unless we return // the full (present) value or some sub-string or length of it, so that // we can add on more if we need to. //不忘新增字尾的長度 return (value != null ? value.length() + suffix.length() : emptyValue.length()); } }