Java中字符串常見的一些拼接方式總結(jié)
方式一:+ 最常見的方式
String aa = "今天";
String bb = "明天";
System.out.println(aa+bb);
方式二:StringBuilder.append()和StringBuffer.append()
先有StringBuffer后有StringBuilder,兩者就像是孿生雙胞胎,該有的都有,只不過(guò)大哥StringBuffer,大部分方法都經(jīng)過(guò)synchronized修飾,所以StringBuffer是線程安全的,但是它效率就相對(duì)StringBuilder較低
String aa = "今天";
String bb = "明天";
StringBuilder sber = new StringBuilder();
StringBuffer sbf = new StringBuffer();
sber.append(aa).append(bb);
System.out.println(sber.toString());
sbf.append(aa).append(bb);
System.out.println(sbf.toString());
方式三:String類下的cocat()方法
如果拼接的字符串是null,concat會(huì)拋出NullPointerException。如果拼接的字符串是一個(gè)空字符串(“”),那么concat的效率要更高。如果拼接的字符串非常多,concat的效率就會(huì)下降,因?yàn)閯?chuàng)建的字符串對(duì)象越多,開銷越大。
String aa = "今天";
String bb = "明天";
String concat = aa.concat(bb);
System.out.println(concat);
方式四:String類下的join()方法
JDK1.8提供了一種新的字符串拼接姿勢(shì):String類增加了一個(gè)靜態(tài)方法join,第一個(gè)參數(shù)為字符串連接符
String aa = "今天";
String bb = "明天";
String join = String.join("-", aa, bb);
System.out.println(join);
方式五:StringJoiner
StringJoiner是JDK1.8,java.util包中的一個(gè)類,用于構(gòu)造一個(gè)由分隔符重新連接的字符序列
String aa = "今天";
String bb = "明天";
StringJoiner sj = new StringJoiner(":", "[", "]");
sj.add(aa).add(bb);
System.out.println(sj.toString());
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, "", "");//默認(rèn)前綴和后綴為"",重載調(diào)用
}
public StringJoiner(CharSequence delimiter,
CharSequence prefix,
CharSequence suffix) {
//間隔符,前綴和后綴判斷是否為null,null將拋出異常
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;//空值被設(shè)置為只有前后綴
}
//設(shè)置空值,檢查是否為null
public StringJoiner setEmptyValue(CharSequence emptyValue) {
this.emptyValue = Objects.requireNonNull(emptyValue,
"The empty value must not be null").toString();
return this;
}
@Override
public String toString() {
if (value == null) {
return emptyValue;//沒有值將返回空值或者后續(xù)設(shè)置的空值
} else {
if (suffix.equals("")) {
return value.toString();//后綴為""直接返回字符串,不用添加
} else {
//后綴不為"",添加后綴,然后直接返回字符串,修改長(zhǎng)度
int initialLength = value.length();
String result = value.append(suffix).toString();
// reset value to pre-append initialLength
value.setLength(initialLength);
return result;
}
}
}
初始化,先添加前綴,有了之后每次先添加間隔符,StringBuilder后續(xù)append字符串
public StringJoiner add(CharSequence newElement) {
prepareBuilder().append(newElement);
return this;
}
//合并StringJoiner,注意后面StringJoiner 的前綴就不要了,后面的appen進(jìn)來(lái)
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.
//不忘添加后綴的長(zhǎng)度
return (value != null ? value.length() + suffix.length() :
emptyValue.length());
}
}方式六:StringUtils.join()
實(shí)戰(zhàn)項(xiàng)目中,我們處理字符串的時(shí)候,經(jīng)常會(huì)用到這個(gè)類.org.apache.commons.lang3.StringUtils包下,該方法更善于拼接數(shù)組中的字符串,并且不用擔(dān)心 NullPointerException。
String aa = "今天";
String bb = "明天";
String ids[] = {"1","2","3"};
System.out.println(StringUtils.join(aa,bb,"-","124"));
String join1 = StringUtils.join(ids,",");
System.out.println(join1);
總結(jié)
到此這篇關(guān)于Java中字符串常見的一些拼接方式的文章就介紹到這了,更多相關(guān)Java字符串拼接方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java.lang.Long cannot be cast to ja
本文主要介紹了java.lang.Long cannot be cast to java.lang.Integer數(shù)據(jù)類型轉(zhuǎn)換異常解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07
SpringMVC多個(gè)文件上傳及上傳后立即顯示圖片功能
這篇文章主要介紹了SpringMVC多個(gè)文件上傳及上傳后立即顯示圖片功能,非常不錯(cuò),具有參考借鑒價(jià)值功能,需要的朋友可以參考下2017-10-10
java實(shí)現(xiàn)計(jì)算器加法小程序(圖形化界面)
這篇文章主要介紹了Java實(shí)現(xiàn)圖形化界面的計(jì)算器加法小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05
Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑
這篇文章主要介紹了Spring整合Mybatis使用<context:property-placeholder>時(shí)的坑 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06
通過(guò)實(shí)例解析JMM和Volatile底層原理
這篇文章主要介紹了通過(guò)實(shí)例解析JMM和Volatile底層原理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
java導(dǎo)出到excel常用的幾種方式總結(jié)
導(dǎo)出excel是咱Java開發(fā)的必備技能啦,之前項(xiàng)目有這個(gè)功能,現(xiàn)在將其獨(dú)立出來(lái),分享一下,下面這篇文章主要給大家介紹了關(guān)于java導(dǎo)出到excel常用的幾種方式,需要的朋友可以參考下2023-05-05
JAVA正則表達(dá)式及字符串的替換與分解相關(guān)知識(shí)總結(jié)
今天給大家?guī)?lái)的是關(guān)于Java的相關(guān)知識(shí)總結(jié),文章圍繞著JAVA正則表達(dá)式及字符串的替換與分解展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06

