最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java字符串處理String、StringBuffer、StringBuilder完全詳解

 更新時(shí)間:2026年05月23日 11:38:53   作者:綾波粒  
StringBuffer與StringBuilder是Java語言中用于處理可變字符序列的類,支持字符串內(nèi)容的多次修改且不產(chǎn)生新對象,這篇文章主要介紹了Java字符串處理String、StringBuffer、StringBuilder的相關(guān)資料,需要的朋友可以參考下

1、String類的常用方法

1.1 獲取字符串信息

int length()

返回字符串的長度

int len = str.length();

char charAt(int index)

返回指定索引處的字符

char c = str.charAt(0);

boolean isEmpty()

判斷字符串是否為空(長度是否為 0)

boolean empty = str.isEmpty();

1.2 大小寫轉(zhuǎn)換

String toLowerCase()

將字符串轉(zhuǎn)換為小寫(默認(rèn)語言環(huán)境)

String lower = str.toLowerCase();

String toUpperCase()

將字符串轉(zhuǎn)換為大寫(默認(rèn)語言環(huán)境)

String upper = str.toUpperCase();

1.3 字符串處理

String trim()

去除字符串首尾的空白字符

String result = str.trim();

String substring(int beginIndex)

從指定位置開始截取子字符串

String sub = str.substring(2);

String substring(int beginIndex, int endIndex)

截取指定范圍的子字符串(左閉右開)

String sub = str.substring(2, 5);

1.4 字符串比較

boolean equals(Object obj)

比較字符串內(nèi)容是否相同

boolean flag = str1.equals(str2);

boolean equalsIgnoreCase(String anotherString)

比較字符串內(nèi)容是否相同(忽略大小寫)

boolean flag = str1.equalsIgnoreCase(str2);

int compareTo(String anotherString)

比較兩個(gè)字符串的大?。ò醋值漤樞颍?/p>

int result = str1.compareTo(str2);

1.5 字符串拼接

String concat(String str)

將指定字符串拼接到當(dāng)前字符串末尾(等價(jià)于 +

String result = str1.concat(str2);
// 或
String result = str1 + str2;

1.6 字符串查找與匹配

boolean endsWith(String suffix)

測試此字符串是否以指定的后綴結(jié)束

String str1 = "helloworld";
boolean b1 = str1.endsWith("rld");

boolean startsWith(String prefix)

測試此字符串是否以指定的前綴開始

String str1 = "helloworld";
boolean b2 = str1.startsWith("He");

boolean startswith(String prefix,int toffset)

測試此字符串從指定索引開始的子字符串是否以指定的前綴開始

String str1 = "helloworld";
boolean b3 = str1.startsWith("11", 2);

boolean contains(CharSequence s)

當(dāng)且僅當(dāng)此字符串包含指定的 char 值序列時(shí),返回true

String str1 = "helloworld";
String str2 = "wor";
System.out.println(str1.contains(str2));

int indexOf(String str)

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

String str1 = "helloworld";
System.out.println(str1.indexOf("lol"));

int indexOf(String str,int fromIndex)

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

String str1 = "helloworld";
System.out.println(str1.indexOf("lo",5));

int lastIndexOf(String str)

返回指定子字符串在此字符串中最右邊出現(xiàn)處的索引

String str3 = "hellorworld";
System.out.println(str3.lastIndexOf("or"));

int lastlndexOf(String str,int fromlndex)

返回指定子字符串在此字符串中最后次出現(xiàn)處的索引,從指定的索引開始反向搜索(從后往前找)

String str3 = "hellorworld";
System.out.println(str3.lastIndexOf("or", 6));

注:indexOflastlndexOf方法如果未找到都是返回-1

1.7 字符串替換方法

String replace(char oldChar,char newChar)

返回一個(gè)新的字符串,它是通過用newChar替換此字符串中出現(xiàn)的所有oldchar得到的。

String str1 = "咕嚕咕嚕咚";
String str2 = str1.replace('咕','嘟');
System.out.println(str1);
System.out.println(str2);

String replace(CharSequence target, CharSequence replacement)

使用指定的字面值替換序列替換此字符串所有匹配字面值目標(biāo)序列的子字符串。

String str1 = "咕嚕咕嚕咚";
String str3 = str1.replace("咕嚕", "嘟嗚");
System.out.println(str3);

1.8 正則匹配與替換

String replaceAll(String regex, String replacement)

使用給定的replacement替換此字符串所有匹配給定的正則表達(dá)式的子字符串。

String str = "123java456mysql21345spring215mybatis4444"
// 把字符串中的數(shù)字替換成,,如果結(jié)果中開頭和結(jié)尾有,的話去掉
String string = str.replaceAll("\\d+",",").replaceAll("^,|,$","");
System.out.println(string);

String replaceFirst(String regex, String replacement)

使用給定的replacement替換此字符串匹配給定的正則表達(dá)式的第一個(gè)子字符串。

String str = "12345";//判斷str字符串中是否全部有數(shù)字組成,即有1-n個(gè)數(shù)字組成
boolean matches = str.matches("\\d+");
System.out.println(matches);

boolean matches(String regex)

告知此字符串是否匹配給定的正則表達(dá)式。

String tel = "0571-4534289";
//判斷這是否是一個(gè)杭州的固定電話
boolean result = tel.matches("0571-\\d{7,8}");
System.out.println(result);

1.9 字符串拆分

String[] split(String regex)

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

String str = "hello|world|java";
String[] strs = str.split("\\|");
for (int i = 0; i < strs.length; i++) {
    System.out.println(strs[i]);
}

String[] split(String regex,int limit)

根據(jù)匹配給定的正則表達(dá)式來拆分此字符串,最多不超過limit個(gè),如果超過了,剩下的全部都放到最后一個(gè)元素中。

String str2 = "hello.world.java";
String[] strs2 = str2.split("\\.");
for (int i = 0; i < strs2.length; i++){
    System.out.println(strs2[i]);
}

2、String與基本數(shù)據(jù)類型轉(zhuǎn)換

  • 字符串→基本數(shù)據(jù)類型、包裝類
    • Integer包裝類public static int parselnt(String s)方法可以將由 “數(shù)字”字符組成的字符串轉(zhuǎn)換為整型。
    • 類似地,使用java.lang包中的Byte、Short、Long、Float、Double類調(diào)相應(yīng)的類方法可以將由“數(shù)字”字符組成的字符串,轉(zhuǎn)化為相應(yīng)的基本數(shù)據(jù)類型。
  • 基本數(shù)據(jù)類型、包裝類→字符串
    • 調(diào)用String類public String valueOf(int n)可將int型轉(zhuǎn)換為字符串
    • 相應(yīng)valueOf(byte b)、valueOf(long I)、valueOf(float f)、valueOf(doubled)、valueOf(boolean b)可由參數(shù)的相應(yīng)類型到字符串的轉(zhuǎn)換
String str1 = "123";
// 字符串 -> int
// int num = (int) str1; //錯(cuò)誤的
int num = Integer.parseInt(str1);
// int -> 字符串
String str2 = String.valueOf(num);
String str3 = num+"";
System.out.println(str2);
System.out.println(str3);

2.1 String與字符數(shù)組之間的轉(zhuǎn)換

字符串→字符數(shù)組

String --> char[]

調(diào)用String的toCharArray()/public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) 方法

// getChars(int srcBegin, int srcEnd, char dst[], int dstBegin)
String str1 = "abc123";
char[] charArray1 = new char[str1.length()];
str1.getChars(0,6,charArray1,0);
for (int i = 0; i < charArray1.length; i++) {
    System.out.println(charArray1[i]);
}
// toCharArray()
str1 = "abc123";
char[] charArray = str1.toCharArray();
for (int i = 0; i < charArray.length; i++) {
    System.out.println(charArray[i]);
}

字符數(shù)組→字符串

char[]-->String

調(diào)用String的構(gòu)造器

  • String(char[])
  • String(char[],int offset,int length)
// String(char[])
char[] arr = new char[]{'h','e','l','l','o'};
String str2 = new String(arr);
System.out.println(str2);
// String(char[],int offset,int length)
String str3 = new String(arr,1,3);
System.out.println(str3);

2.2 String與字節(jié)數(shù)組之間的轉(zhuǎn)換

字符串→字節(jié)數(shù)組

編碼:字符串→字節(jié)(看得懂→看不懂的二進(jìn)制數(shù)據(jù))

調(diào)用String的public byte[] getBytes()/public byte[] getBytes(String charsetName) 方法

String str1 = "abc123中國";
byte[] bytes = str1.getBytes();// 使用默認(rèn)字符集,進(jìn)行轉(zhuǎn)換
System.out.println(Arrays.toString(bytes));

byte[] gbks = str1.getBytes("gbk");
System.out.println(Arrays.toString(gbks));

字節(jié)數(shù)組→字符串

解碼:編碼的逆過程,字節(jié)→字符串(看不懂的二進(jìn)制數(shù)據(jù)→看得懂)

調(diào)用String的構(gòu)造器

  • String(byte[])
  • String(byte[],int offset,int length)
// 使用默認(rèn)字符集進(jìn)行解碼
String s = new String(bytes);
System.out.println(s);
String s1 = new String(gbks, "gbk");
System.out.println(s1);
String s2 = new String(gbks);
System.out.println(s2);

說明:解碼時(shí),要求解碼使用的字符集必須與編碼時(shí)使用的字符集一致,否則會(huì)出現(xiàn)亂碼。

3、String/StringBuffer/StringBuilder類

3.1 String、StringBuffer、StringBuilder三者的異同

String:不可變(final)的字符序列;底層使用char[]存儲(chǔ)

StringBuffer:可變的字符序列;線程安全的,效率低;底層使用char[]存儲(chǔ)

StringBuilder:可變的字符序列;jdk5.0新增的,線程不安全的,效率高;底層使用char[]存儲(chǔ)

3.2 StringBuffer源碼分析

String str = new String();//char[] value = new char[0];
String str1 = new String("abc");//char[] value = new char[]{'a','b','c'};

StringBuffer sb1 = new StringBuffer();//char[] value = new char[16]; 底層創(chuàng)建了一個(gè)長度為16的字符數(shù)組
sb1.append('a');//value[0]='a';
sb1.append('b');//value[1]='b';

StringBuffer sb2 = new StringBuffer("abc");//char[]value = new char["abc".length()+16];

//問題1.System.out.println(sb2.length());//3
//問題2.擴(kuò)容問題:如果要添加的數(shù)據(jù)底層數(shù)組盛不下了,那就需要擴(kuò)容底層的數(shù)組。
//	   默認(rèn)情況下,擴(kuò)容為原來容量的2倍+2,同時(shí)將原有數(shù)組中的元素復(fù)制到新的數(shù)組中。
//	   開發(fā)中建議大家使用:StringBuffer(int capacity)或 StringBuilder(int capacity)

3.3 StringBuffer中的常用方法

3.3.1 字符串操作方法

拼接

  • StringBuffer append(xxx)

用于字符串拼接,支持多種數(shù)據(jù)類型,是最常用的方法

sb.append("hello").append(" world");

刪除

  • StringBuffer delete(int start, int end)

刪除指定范圍的字符(左閉右開)

sb.delete(0, 2);

替換

  • StringBuffer replace(int start, int end, String str)

將指定區(qū)間的內(nèi)容替換為新字符串

sb.replace(0, 2, "hi");

插入

  • StringBuffer insert(int offset, xxx)

在指定位置插入內(nèi)容

sb.insert(1, "abc");

反轉(zhuǎn)

  • StringBuffer reverse()

將字符序列反轉(zhuǎn)

sb.reverse();

當(dāng)appendinsert時(shí),如果原來value數(shù)組長度不夠,可擴(kuò)容。

如上這些方法支持方法鏈操作。

StringBuffer 支持方法鏈調(diào)用,例如:

sb.append("a").append("b").append("c");

原理:

  • 方法返回的是 this(當(dāng)前對象)
  • 因此可以連續(xù)調(diào)用多個(gè)方法

3.3.2 查詢相關(guān)方法

  • int indexOf(String str)
    返回子字符串第一次出現(xiàn)的位置
  • String substring(int start, int end)
    截取子字符串(左閉右開)
  • int length()
    返回當(dāng)前長度
  • char charAt(int n)
    獲取指定位置字符
  • void setCharAt(int n, char ch)
    修改指定位置字符

方法總結(jié):

增:append(xxx)

刪:delete(int start,int end)

改: setCharAt(int n ,char ch) / replace(int start, int end, String str)

查:charAt(int n)

插:insert(int offset,xxx)

長度:length();

遍歷:for()+charAt()/toString()

總結(jié)

到此這篇關(guān)于Java字符串處理String、StringBuffer、StringBuilder完全詳解的文章就介紹到這了,更多相關(guān)Java字符串String、StringBuffer、StringBuilder內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

宁夏| 阜阳市| 哈尔滨市| 上思县| 双城市| 长葛市| 社会| 灵丘县| 荥阳市| 麻城市| 泊头市| 颍上县| 涟源市| 武汉市| 郧西县| 洛阳市| 和林格尔县| 沙河市| 南陵县| 吉木乃县| 奎屯市| 雷州市| 蓬莱市| 汝州市| 彝良县| 亚东县| 桐柏县| 屏南县| 肥城市| 宁武县| 商水县| 张北县| 清新县| 堆龙德庆县| 武定县| 来宾市| 厦门市| 伊宁县| 平乡县| 澄江县| 安丘市|