Java字符串詳解的實例介紹
1.創(chuàng)建對象
對于java程序中的字符串直接常量,JVM會使用一個字符串池來保存它們。當?shù)谝淮问褂媚硞€字符串直接常量時,JVM會將它放入字符串池中進行緩存。在一般情況下,字符串池中的字符串對象不會被垃圾回收。當程序再次需要使用該字符串時,無需重新創(chuàng)建一個新的字符串就可以直接讓引用變量直接指向字符串中已有的字符串。而使用new操作創(chuàng)建的字符串對象不指向字符串池中的對象,但是可以使用intern()方法使其指向字符串池中的對象。
public class StringDemo1 {
public static void main(String[] args){
String str1 ="abc";
String str2 ="abc";
String str3 =new String("abc");
System.out.println(str1==str2);//true
System.out.println(str1==str3);//false
}
}
常見問題
String str3 =new String("abc");
創(chuàng)建了幾個對象?
答:兩個
String str ="ab"+"cd";
創(chuàng)建了幾個對象?
答:一個。"ab"和"cd"都是常量被放在字符串池中。因此只創(chuàng)建了一個abcd字符串池中并將字符串a(chǎn)bcd保存在字符串池中。
public class StringDemo1 {
public static void main(String[] args){
String str1 ="ab";
String str2 ="cd";
String str3 ="ab"+"cd";//創(chuàng)建對象并加入字符串池
String str4 =str1+str2;
String str5 =str1+"cd";
System.out.println(str3==str4);//false
System.out.println(str3==str5);//false
}
}
由上面代碼可知:只有引號包含文本的方式才創(chuàng)建的String對象才能被添加到字符串池中,對于包含new方法新建對象的”+“連接表達式他所產(chǎn)生的新對象不會被加到字符串池中。
但是有一種情況需要引起我們的注意:
public class StringDemo1 {
private final static String str1 ="ab";
private final static String str2 ="cd";
public static void main(String[] args){
String str3 ="ab"+"cd";//創(chuàng)建對象并加入字符串池
String str4 =str1+str2;
String str5 =str1+"cd";
System.out.println(str3==str4);//true
System.out.println(str3==str5);//true
}
}
這又是為什么呢?原因是這樣的,對于常量來講。它的值是固定的,因此在編譯期間就能被確定了。
將上面的代碼稍加改變看看會出現(xiàn)什么情況。
public class StringDemo1 {
private final static String str1 ;
private final static String str2;
static{
str1="ab";
str2="cd";
}
public static void main(String[] args){
String str3 ="ab"+"cd";//創(chuàng)建對象并加入字符串池
String str4 =str1+str2;
String str5 =str1+"cd";
System.out.println(str3==str4);//false
System.out.println(str3==str5);//false
}
}
str1和str2雖然被定義為常量,但是她們美譽馬上賦值,在運算出s的值前,她們何時被賦值,以及被賦什么值都是變數(shù),因此性質(zhì)和變量一樣。只能在運行時被創(chuàng)建。
2.字符串方法
獲取方法
•int length()
•char charAt(int index)根據(jù)位置獲取某個字符
•int indexOf(int ch) 返回的是ch在字符串中第一次出現(xiàn)的位置
•int indexOf(int ch,int fromIndex)從fromIndex指定位置開始,獲取ch在字符串中第一次出現(xiàn)的位置
•int indexOf(String str)
•int indexOf(String str,int fromIndex)
•int lastIndexOf(int ch)
判斷方法
•boolean contains(String str) 另一種判斷方法:if(str.index(str)!=-1)
•boolean startsWith(String str)
•boolean endsWith(String str)
•bolean isEmpty(String str)
•boolean equals(String str)
•boolean equalsIgnoreCase(String str);
轉(zhuǎn)換方法
•將字符數(shù)組轉(zhuǎn)換為字符串
構(gòu)造函數(shù)
1.String(char[] chs)
2.String(char[] chs,offset,count)將字符數(shù)組中的一部分轉(zhuǎn)成字符串。
靜態(tài)方法
1.static String copyValueOf(char[] chs)
2.static String copyValueOf(char[] chs,int offset,int count)
3.static String valueOf(char[] )
4.static String valueOf(char[] chs,int offset,int count)
•將字符串轉(zhuǎn)換成字符數(shù)組
char[] toCharArray
•將字符數(shù)組轉(zhuǎn)換成字符串
•將字符串轉(zhuǎn)換成字節(jié)數(shù)組
byte[] toBytes
替換方法
String replace(olderStr,newStr)
切割方法
String split(regex)
獲取子串[編輯分類]
String subString(begin)
String subString(begin,end)包含頭不包含尾
將字符串轉(zhuǎn)換成大小寫Android(10)
String toUpperCase()
String toLowerCase()
將字符串兩端的空格去除
String trim()
對兩個字符串進行自然順序的比較
int compareTo(String str)
3.String 練習
1.字符串翻轉(zhuǎn)
public class StringDemo2 {
public static void main(String[] args){
String str = "avdkfasjks";
reverseMethod_1(str);
}
public static void reverseMethod_1(String str){
for(int i=str.length();i>0;i--){
System.out.print(str.charAt(i-1));
}
}
}
2.獲取最大相同子串
public class StringDemo2 {
public static void main(String[] args){
String str1 = "avdkfasjks";
String str2 = "ewavdrtte";
System.out.println(commonMaxSubstring(str1, str2));
}
public static String commonMaxSubstring(String str1,String str2){
int len = str1.length();
String str3 = null;
outer:
//i為子串的長度
for(int i = len;i>0;i--){
//j為子串的腳標
for(int j=0;j<len-i+1;j++){
str3=str1.substring(j,j+i);
if(str2.contains(str3))
break outer;
}
}
return str3;
}
}
相關(guān)文章
Java線程之間數(shù)據(jù)傳遞的實現(xiàn)示例(4種)
我們經(jīng)常會遇到父子線程數(shù)據(jù)傳遞(非調(diào)用參數(shù))的場景,本文主要介紹了Java線程之間數(shù)據(jù)傳遞的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-08-08
Spring?boot?Jpa添加對象字段使用數(shù)據(jù)庫默認值操作
這篇文章主要介紹了Spring?boot?Jpa添加對象字段使用數(shù)據(jù)庫默認值操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11
Spring Data JPA實現(xiàn)動態(tài)條件與范圍查詢實例代碼
本篇文章主要介紹了Spring Data JPA實現(xiàn)動態(tài)條件與范圍查詢實例代碼,非常具有實用價值,需要的朋友可以參考下2017-06-06
springboot過濾器執(zhí)行兩次的解決及跨域過濾器問題
這篇文章主要介紹了springboot過濾器執(zhí)行兩次的解決及跨域過濾器問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-12-12
淺析Bean?Searcher?與?MyBatis?Plus?區(qū)別介紹
Bean?Searcher號稱任何復雜的查詢都可以一行代碼搞定,但?Mybatis?Plus?似乎也有類似的動態(tài)查詢功能,最近火起的?Bean?Searcher?與?MyBatis?Plus?倒底有啥區(qū)別?帶著這個問題一起通過本文學習下吧2022-05-05

