Java字符串處理String、StringBuffer、StringBuilder完全詳解
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));
注:indexOf和lastlndexOf方法如果未找到都是返回-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)換
- 調(diào)用
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)append和insert時(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)文章希望大家以后多多支持腳本之家!
- 全面解釋java中StringBuilder、StringBuffer、String類之間的關(guān)系
- 深入解析StringBuffer和StringBuilder的區(qū)別
- java 中String和StringBuffer與StringBuilder的區(qū)別及使用方法
- Java之String、StringBuffer、StringBuilder的區(qū)別分析
- Java那點(diǎn)事——StringBuffer與StringBuilder原理與區(qū)別
- Java 中String StringBuilder 與 StringBuffer詳解及用法實(shí)例
- Java StringBuilder和StringBuffer源碼分析
- Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法
- 詳細(xì)分析Java中String、StringBuffer、StringBuilder類的性能
- java String、StringBuilder和StringBuffer的區(qū)別詳解
相關(guān)文章
springboot @ConfigurationProperties和@PropertySource的區(qū)別
這篇文章主要介紹了springboot @ConfigurationProperties和@PropertySource的區(qū)別,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
SpringBoot全局配置long轉(zhuǎn)String丟失精度的問題解決
web項(xiàng)目中,Java后端傳過來的Long/long類型,前端JS接收會(huì)丟失精度。那么應(yīng)該如何解決,本文就來介紹一下幾種方法,感興趣的可以了解一下2021-08-08
在Windows系統(tǒng)下安裝Thrift的方法與使用講解
今天小編就為大家分享一篇關(guān)于在Windows系統(tǒng)下安裝Thrift的方法與使用講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2018-12-12
Java文件字符輸入流FileReader讀取txt文件亂碼的解決
這篇文章主要介紹了Java文件字符輸入流FileReader讀取txt文件亂碼的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
JAVA線程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解
這篇文章主要為大家介紹了JAVA線程池監(jiān)控以及動(dòng)態(tài)調(diào)整示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
SpringBoot實(shí)現(xiàn)接口數(shù)據(jù)加解密的三種實(shí)戰(zhàn)方案
在金融支付、用戶隱私信息傳輸?shù)葓鼍爸?接口數(shù)據(jù)若以明文傳輸,極易被中間人攻擊竊取,Spring Boot 提供了多種優(yōu)雅的加解密實(shí)現(xiàn)方案,本文將從原理到實(shí)戰(zhàn),帶你掌握三種主流實(shí)現(xiàn)方式,需要的朋友可以參考下2025-05-05
Java EE項(xiàng)目中的異常處理總結(jié)(一篇不得不看的文章)
什么是異常?運(yùn)行時(shí)發(fā)生的可被捕獲和處理的錯(cuò)誤。這篇文章主要介紹了Java EE項(xiàng)目中的異常處理總結(jié),有需要的可以了解一下。2016-11-11

