--------------------ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! --------------------
1. String類
1.概述
String是一個特殊的類,一旦被初始化,那麼就不能被改變,String類是一個被final修飾的類。
2.String的初始化
String s1=”abc”;這個表示的是一個對象,但是不是在內存中創建的,而是在內存的緩衝區(常量池)中創建了一個“abc”對象,只有通過new關鍵字創建的,纔在堆中申請了內存空間,並且在棧中有聲明的變量名稱。
當有Strings1=”abc”,String s2=”abc”;都執行的話,當執行了s1後,會在內存的緩衝區(常量池)中創建了”abc”字符串對象,然後在執行s2的時候,那麼先去內存緩衝區查找,要是存在了,那麼就直接指向此對象,直接使用,所以,這兩句話也就純創建了一個”abc”字符串。
String str=new String(“xyz”);這是創建了兩個對象,一個是先在內存中通過new創建了一個對象,然後在內存緩衝區中又創建了一個字符串“xyz”,然後在內存中的指向了內存緩衝區(常量池)中的對象。
在常量池中只有一個相等的字符串,但是在內存中可以有多個相等的字符串。
3.一道面試題
String str=new String(“xyz”);此語句產生幾個對象,
如果常量池中已經有“xyz”字符串的話,那麼就產生一個對象,要是常量池中沒有”xyz”,那麼就產生兩個對象,一個是咋內存中,一個是在常量池中(內存緩衝區)
2. 字符串比較
有兩種比較方法:==和equals。
==:比較的是內存地址,equals比較的內容
public class Text {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(s1 == s2);// true 地址相等
System.out.println(s1.equals(s2));// true 內容相同
System.out.println(str1 == str2);// false 地址不相等
System.out.println(str1.equals(str2));// true 內容相同
System.out.println(s1 == str2);// false 地址不相等
System.out.println(s1.equals(str2));// true 內容相同
}
}
3. 獲取
下面舉了一些常用的方法,這些方法還有很多重載的,小想查看全面的,請查看API文檔 java.lang.String包,裏面方法很全
public class getString {
public static void main(String[] args) {
String str = "abcdasdfgh";
// 獲取長度
System.out.println(str.length());
// 通過位置獲取字符
System.out.println(str.charAt(3));
// 通過字符獲取位置
System.out.println(str.indexOf('d'));// 從首位置開始查找,第一個字符d
System.out.println(str.indexOf('d', 5));// 從位置5開始查找,遇到的第一個字符d
// 獲取子字符串的位置
System.out.println(str.indexOf("asd"));// 獲取字符串asd在str中的位置
}
}
結果:
10
d
3
6
4
4. 判斷
下面舉了一些常用的判斷方法,還有很多重載和其他的方法都不一一舉例了,有疑問參考API文檔
public class judgeString {
public static void main(String[] agrs) {
String str = "zhangsan.java";
// 判斷字符串是否爲空
System.out.println(str.isEmpty());// false
// 判斷字符串是否包含某內容
System.out.println(str.contains("."));// true
// 判斷字符串是否是以指定前綴開始
System.out.println(str.startsWith("zhang"));// true
// 判斷字符串是否是以指定後綴結束
System.out.println(str.endsWith(".java"));// true
}
}
5. 轉換
1.將字符數組轉換成字符串
構造函數:String(char [] values); String(char []values,start,end);將一部分字符數組轉換成字符串
Static String copyValuesof(char [] );
2.將字符串轉換成字符數組
toChatArray();
3.將字節數組轉換成字符換
String(byte [] ); String(byte []values,start,end);
4.將字符串轉換成字節數組
getBytes();
5.將基本數據類型轉換成字符串
valuesOf(int a);
public class ZhuanString {
public static void main(String[] args) {
String str="abcdef";
char [] cs={'h','e','l','l','o'};
//將字符串轉換成字符數組
char [] newcs=str.toCharArray();
//將字符數組轉換成字符串
System.out.println(new String(cs));
//將字符串轉換成字節數組
byte [] bs=str.getBytes();
//將字節數組轉換成字符串
System.out.println(new String(bs));
//將基本數據類型轉換成字符串
System.out.println(String.valueOf(4));
}
}
6. 分割,替換,截取
public class Text {
public static void main(String[] args) {
String str="zhangsan,lisi,wangwu";
//分割
String [] ss=str.split(",");
for(String t:ss)
System.out.print(t+" ");
//替換
String s=str.replace('w', 'y');
String s1=str.replace("zhangsan", "sa");
//截取
String s3=str.substring(4);
String s4=str.substring(2,8);
System.out.println("\ns="+s);
System.out.println("s1="+s1);
System.out.println("s3="+s3);
System.out.println("s4="+s4);
}
}
結果:
zhangsanlisi wangwu
s=zhangsan,lisi,yangyu
s1=sa,lisi,wangwu
s3=gsan,lisi,wangwu
s4=angsan
7.去除空格,大小寫轉換,比較
public class Text {
public static void main(String[] args) {
String str=" abc ";
//取出兩邊空格
String s1=str.trim();
//大小寫轉換
String s2=s1.toUpperCase();//轉換成大寫
String s3=s2.toLowerCase();//轉換成小寫
//比較
System.out.println("s1="+s1);
System.out.println("s2="+s2);
System.out.println("s3="+s3);
System.out.println(s2+"和"+s3+"比較大小="+s2.compareTo(s3));
//比較的時候是根據字符的ASCII進行的比較
//小於0表示s2小於s2
//等於0 表示s2和s3相等
//大於0 表示s2比s3大
}
}
結果:
s1=abc
s2=ABC
s3=abc
ABC和abc比較大小=-32