溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

老生常談Java字符串進(jìn)階(必看篇)

發(fā)布時(shí)間:2020-09-08 21:26:12 來源:腳本之家 閱讀:141 作者:jingxian 欄目:編程語言

前言

最常用的對字符串操作的類有三個(gè),分別是String,StringBuilder,StringBuffer,下面將會(huì)詳細(xì)的說說這三個(gè)類......

String

String類代表字符串,這個(gè)是最基本的對字符串的類,這個(gè)也是使用比較多的類,這里就不再詳細(xì)介紹了

構(gòu)造

new String(String str)

new String(StringBuilder str)

new String(StringBuffer str)

new String(byte[] bys,String charsetName) 通過使用指定的字符集解碼指定的 byte 子數(shù)組,構(gòu)造一個(gè)新的 String。

常用方法

str charAt(int index) 返回指定索引處的字符

String concat(String str) 將指定字符串str連接到此字符串的結(jié)尾,返回連接成功后的字符,因此需要接受才能有效果

boolean contains(CharSequence s) 判斷此字符串是否包含指定的char值序列,這里的 CharSequence是一個(gè)接口,可以直接使用它的子類作為參數(shù)(String,StringBuffer,StringBuild)

static String copyValueOf(char[] c) 將字符數(shù)組變成字符串并且返回

static String copyValueOf(char[] c,int off,int count) 將截取的字符數(shù)組變成字符串并且返回,off是開始截取的下標(biāo),count是截取的個(gè)數(shù)

boolean endWith(String s) 判斷字符串是否是以s結(jié)尾

boolean equals(Object o) 用于比較

int indexOf(char c) 返回字符c在字符串中第一次出現(xiàn)的索引

int indexOf(char c,int fromIndex) 從指定索引處開始搜索,查找第一次出現(xiàn)的索引

int indexOf(String str) 返回指定子字符串在此字符串中第一次出現(xiàn)處的索引。

int indexOf(String str,int fromIndex) 返回指定子字符串在此字符串中第一次出現(xiàn)處的索引,從指定的索引開始。

boolean isEmpty()

int length()

boolean matches(String regex) 是否匹配正則表達(dá)式

trim() 返回字符串的副本,忽略前導(dǎo)空白和尾部空白。

String substring(int beginIndex) 返回一個(gè)新的字符串,它是此字符串的一個(gè)子字符串。

String substring(int beginIndex, int endIndex) 返回一個(gè)新字符串,它是此字符串的一個(gè)子字符串。

String toUpperCase() 使用默認(rèn)語言環(huán)境的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為大寫。

String[] split(String regex) 根據(jù)給定正則表達(dá)式的匹配拆分此字符串。

String[] split(String regex, int limit) 根據(jù)匹配給定的正則表達(dá)式來拆分此字符串。

char[] toCharArray() 將此字符串轉(zhuǎn)換為一個(gè)新的字符數(shù)組。

byte[] getBytes(Charset charset) 使用給定的 charset 將此 String 編碼到 byte 序列,并將結(jié)果存儲(chǔ)到新的 byte 數(shù)組

注意

上面的new String(byte[] bys,String charsetName)這個(gè)構(gòu)造方法很重要,它可以改變字符串的編碼集(和byte[] getBytes(Charset charset))配合著使用,下面我們來看一個(gè)例子,代碼如下:

/*
 * InputStreamReader實(shí)現(xiàn)了將字節(jié)流FileInputStream轉(zhuǎn)換為字符流,然后使用轉(zhuǎn)換來的字節(jié)流創(chuàng)建高效流,從而實(shí)現(xiàn)高效的讀寫
 */

/*
 * 編碼集(我的eclipse編輯器默認(rèn)的是utf-8
 * 下面將中文字符串的編碼集變?yōu)镚BK寫入a.txt文件,因?yàn)閍.txt默認(rèn)的是utf-8的因此這里在文件中顯示的是亂碼
 * 然后我們讀出來的還是GBK的,因?yàn)槲覀儗懭氲氖荊BK編碼集的,但是我的eclipse是utf-8的編碼集,因此在控制臺(tái)上輸出的還是亂碼
 * new String(byte[] bys,String
 * charsetName)使用這個(gè)構(gòu)造方法將byte數(shù)組改變編碼集并且轉(zhuǎn)換為utf-8格式的,那么這次在控制臺(tái)上輸出的就不亂碼了
 */

// 將GBK格式的中文寫入a.txt文件
File file = new File("src/a.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
String str = "中";
byte[] by = str.getBytes("GBK"); // 將字符串改為GBK編碼集
fileOutputStream.write(by);
fileOutputStream.close();

//從a.txt文件中讀取中文
FileInputStream fileInputStream = new FileInputStream(file);
int len;
byte[] bys = new byte[4];
while ((len = fileInputStream.read(bys)) != -1) {
 System.out.println(new String(bys, "GBK"));
}
fileInputStream.close();

StringBuffer

線程安全的可變字符序列。一個(gè)類似于 String 的字符串緩沖區(qū),但不能修改。當(dāng)然最重要的一點(diǎn)就是線程安全,我們可以從它的源碼中可以看出,對于一些操作(append,insert..)都是使用了線程控制塊來實(shí)現(xiàn)同步,適合與多線程下的使用,源代碼如下:

 public synchronized StringBuffer append(Object obj) {
super.append(String.valueOf(obj));
return this;
}

public synchronized StringBuffer append(String str) {
super.append(str);
return this;
}

public synchronized StringBuffer delete(int start, int end) {
super.delete(start, end);
return this;
}

/**
 * @throws StringIndexOutOfBoundsException {@inheritDoc}
 * @since 1.2
 */
public synchronized StringBuffer deleteCharAt(int index) {
super.deleteCharAt(index);
return this;
}

構(gòu)造

new StringBuffer(StringBuilder str)
new StringBuffer(String str)

常用的方法

StringBuffer append(str)將指定類型的str追加到此字符串的后面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder)

StringBuffer insert(int offest, str) 將指定類型的str插入到此序列中,offest表示開始插入的位置的索引,類型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilder

String delete(int fromIndex,int endIndex) 移除此序列中的字符串并且返回新的緩沖字符串

StringBuffer reverse() 反轉(zhuǎn)字符串

String substring(int start) 返回一個(gè)新的 String,它包含此字符序列當(dāng)前所包含的字符子序列。

String substring(int start, int end) 返回一個(gè)新的 String,它包含此序列當(dāng)前所包含的字符子序列。

StringBuffer deleteCharAt(int index) 移除此序列指定位置的 char。

int length() 長度

String toString() 返回此序列中數(shù)據(jù)的字符串表示形式。

StringBuilder

建議優(yōu)先采用該類,因?yàn)樵诖蠖鄶?shù)實(shí)現(xiàn)中,它比 StringBuffer 要快。但是這個(gè)類不是線程安全的,只適合單線程,如果使用多線程推薦使用StringBuffer,當(dāng)然使用這個(gè)也行,不過需要自己實(shí)現(xiàn)同步

構(gòu)造方法

new StringBuilder(String str)

常用方法

這個(gè)類的常用方法和StringBuffer的一樣,這里就不再一一列舉了,參照上面的即可使用

以上這篇老生常談Java字符串進(jìn)階(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI