java基礎(四):字串
1.String概念:字串一旦被建立就不可以更改
(1)A.==B:判斷地址; A.equals(B):判斷A,B的內容
(2).常用方法:
長度:str.length();
檢視指定位置的字元:str.charAt(1);
檢視字元所在的位置:str.indexOf("a");
將字串變成字元陣列:str.toCharArray();
以A開頭(結尾):startWith("A"),endWith("A");
包含:A.contains("B");
獲取子字串:str.subString(int start, int end);
將A字元替換成B字元:str.subString("A","B");
去除字串兩邊的空格:str.trim();
比較兩個物件大小:A.compareTo(B)
(3).字串與基本型別的不同之處:
String str1 = "hello";
String srr2 = "java";
當在此方法裡直接:str1 = str2,則輸出結果為:java java
如果在此方法裡將str1,str2作為引數呼叫別的方法,在別的方法裡寫:str1 = str2,則輸出結果為:hello java
分析:因為字串一旦寫出來就不可更改,str1,str2實質上儲存的是字串的地址。如果在本方法裡直接str1 = str2,意味著將str2的地址賦值給str1,此時str1儲存的也是str2一樣的地址,這個地址同時指向java。但是如果將str1,str2作為引數,只是將str1,str2的引用(也可以認為是副本)作為引數傳遞過去,他們本身是沒有任何變化的,而且別的方法裡無論發生什麼對他們都沒有影響。這就是字串區別於基本資料型別的特性。
2.String裡的常見的例項:
(1).關鍵字(key)在一串字串(str)中出現次數
int count = 0;
int index = 0;
while(index = str.indexOf(key,index) != -1){
count ++;
index += key.length();
}
(2).兩個字串(s1,s2)的最大子串
String longStr,shortStr;
longStr = s1.length() > s2.length()?s1:s2;
shortStr = s2.length() <= s1.length()?s2:s1;
for(int x = 0; x < shortStr.length(); x++){
for(int y = 0, z = shortStr.length() - x; z < shortStr.length() ; y++,z++ ){
String temp = shortStr.subString(y,z);
if(longStr.contains(temp))
return temp;
}
}
(3).將字串(str)字元按自然順序排序
char[] chars = str.toCharArray();
Arrays.sort(chars);
return new String(chars);
3.StringBuffer:字串緩衝區(字元容器)
(1).使用場景:有多種資料型別,但是最後都要變成字串型別
侷限性:無論原本是什麼型別,一旦用了StringBuffer,就不可單獨操作,且最後一定是變成字串。
(2).常用方法:
建立緩衝區物件:StringBuffer sb = new StringBuffer();
新增:sb.append("aaa"); //在最後加
sb.insert(1,"aaa"); //指定位置加
刪除:sb.delete(1,5); //包含頭不包含尾
修改:sb.replace(1,5,"aaa"); //包含頭不包含尾
設定長度:sb.setLength(20);
字串倒序:sb.reverse();
(3).StringBuffer一般情況下與StringBuilder一樣。StringBuffer是執行緒同步,StringBuilder執行緒不同步。但是StringBuilder速度更快。
4.基本資料型別的物件包裝
(1).基本資料型別對應的包裝物件
byte--Byte short--Short int--Integer long--Long
float--Float double--Double boolean--Boolean char--Character
(2).與字串的互相轉換
基本資料型別轉成字串:toString();
字串轉成基本資料型別(以int舉例):Integer.parseInt(str);
(3).現在的jdk支援自動裝箱拆箱,具體實現2種方法:
^1.Integer i = new Integer(4); //構造方法
^2.Integer.valueOf(4); //靜態方法
(4).Integer的一個注意點:
Integer m = 127,n = 127;
== > m == n, m.equals(n)
Integer m = 128, n = 128;
== > m != n , m.equals(n)
所以,127是個臨界值