Guava——Joiner

將一個(gè)字符串序列用分隔符連接起來。

1.構(gòu)造函數(shù)

只對(duì)外提供靜態(tài)Joiner.on方法來構(gòu)造joiner

public?static?Joiner on(String separator) {

????return?new?Joiner(separator);

//調(diào)用構(gòu)造方法,傳入分隔符分為字符串和字符兩種形式

}


public?static?Joiner on(char?separator) {

//字符轉(zhuǎn)換為字符串

????return?new?Joiner(String.valueOf(separator));

}


private?Joiner(String separator) {

????this.separator = (String)Preconditions.checkNotNull(separator);

}

2.檢查null

忽略空值

public Joiner skipNulls()

@CheckReturnValue

public?Joiner useForNull(final?String nullText) {

????Preconditions.checkNotNull(nullText);

????return?new?Joiner(this) {

????????CharSequence toString(@Nullable?Object part) {

????????????return?(CharSequence)(part ==?null?? nullText : Joiner.this.toString(part));

????????}


????????public?Joiner useForNull(String nullTextx) {

????????????throw?new?UnsupportedOperationException("already specified useForNull");

????????}


????????public?Joiner skipNulls() {

????????????throw?new?UnsupportedOperationException("already specified useForNull");

????????}

????};

}

public?Joiner skipNulls() {

????return?new?Joiner(this) {

?????//返回新建Joiner 檢查列表里是否有null 有null跳過

????????public? A appendTo(A appendable, Iterator parts)?throws?IOException {

????????????Preconditions.checkNotNull(appendable,?"appendable");

????????????Preconditions.checkNotNull(parts,?"parts");


????????????Object part;

????????????while(parts.hasNext()) {

????????????????part = parts.next();

????????????????if?(part !=?null) {

????????????????????appendable.append(Joiner.this.toString(part));

????????????????????break;

????????????????}

????????????}


????????????while(parts.hasNext()) {

????????????????part = parts.next();

//不等于null 添加僅

????????????????if?(part !=?null) {

????????????????????appendable.append(Joiner.this.separator);

????????????????????appendable.append(Joiner.this.toString(part));

????????????????}

????????????}


????????????return?appendable;

????????}


????????public?Joiner useForNull(String nullText) {

????????????throw?new?UnsupportedOperationException("already specified skipNulls");

????????}


????????public?Joiner.MapJoiner withKeyValueSeparator(String kvs) {

????????????throw?new?UnsupportedOperationException("can't use .skipNulls() with maps");

????????}

????};

}

Joiner joiner = Joiner.on("; ").skipNulls();

return?joiner.join("Harry",?null,?"Ron",?"Hermione");

3.join

public?final?String join(@Nullable?Object first,?@Nullable?Object second, Object... rest) {

????return?this.join(iterable(first, second, rest));

//將元素變成迭代器放入

}

public?final?String join(Iterable<?> parts) {

????return?this.join(parts.iterator());

}


public?final?String join(Iterator<?> parts) {

????return?this.appendTo(new?StringBuilder(), parts).toString();

//調(diào)用 appendTo串聯(lián)起來,拼接字符串

}


public?final?String join(Object[] parts) {

????return?this.join((Iterable)Arrays.asList(parts));

}

public?final?StringBuilder appendTo(StringBuilder builder, Iterator<?> parts) {

????try?{

????????this.appendTo((Appendable)builder, (Iterator)parts);

????????return?builder;

????}?catch?(IOException var4) {

????????throw?new?AssertionError(var4);

????}

}


public?final?StringBuilder appendTo(StringBuilder builder, Object[] parts) {

????return?this.appendTo((StringBuilder)builder, (Iterable)Arrays.asList(parts));

}


public?final?StringBuilder appendTo(StringBuilder builder,?@Nullable?Object first,?@Nullable?Object second, Object... rest) {

????return?this.appendTo(builder, iterable(first, second, rest));

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容