String類的特點:
字串物件一旦被初始化就不會被改變,字串儲存在字串常量池中(字串緩衝區)。如果池中沒有就建立,如果有就直接拿過來用。
程式碼驗證如下:
String s = "abc";//在常量池中建立了一個字串物件
String s1 = "abc";//true
//s與s1內容相同,地址相同
System.out.println(s==s1);//true
System.out.println(s==s1);//true
String s2 = new String("abc");//在堆記憶體中建立了兩個物件,一個new物件一個字串物件
//s與s2內同相同,地址不同
System.out.println(s==s2);//false
System.out.println(s==s2);//true 原因是String類中的equals複寫了String類中的equals建立了String類屬於自己的判斷字串物件是否相同的依據,其實就是比較字串的內容。
String s = new String();//等效於String s= "" 都是空字串,內容相同,但是不等效於String s = null;
按照物件導向的思想對字串功能進行分類
思考思路:如果我們想要使用某種方法或說是功能來達到自己的目的,那麼就首先需要對這種方法進行查詢,看這種方法是否已經給我們封裝好了,例如:如果想要獲取字串的長度,那麼返回值必然是int,確定了返回值再想要找到方法就會很簡單了。那麼再思考的就是我們是否要給這個方法進行引數的傳遞,獲取長度其實就是物件直接呼叫方法就可以了,因此我們也可以確定,這個方法是不需要來進行引數傳遞的。經過以上方式的思考,我們很快就可以確定下來這個方法是哪個。如果這樣的思考之後,還沒有找到我們需要的方法,那麼有可能就需要我們自己進行封裝了。
以下為String類常用的一些方法,也是通過物件導向的思想來進行整理的。
如字串"string"
1,獲取
1.1獲取字串中字元的個數(長度)。
返回值int 方法名:length();
1.2根據位置獲取字元。
返回值char 方法名: charAt(int index);
1.3根據字元獲取在字串中第一次出現的位置。
返回值int 方法名:indexOf(int ch);
返回值int 方法名:indexOf(int ch,int fromIndex);
返回值int 方法名:indexOf(String str);
返回值int 方法名:indexOf(String str,int fromIndex);
1.4根據字串獲取在字串中第一次出現的位置。
返回值int 方法名:lastIndexOf(int ch);
返回值int 方法名:lastIndexOf(int ch,int fromIndex);
返回值int 方法名:lastIndexOf(String str);
返回值int 方法名:lastIndexOf(String str,int fromIndex);
1.5根據字串獲取字串中的一部分字串,即子串。 返回值String 方法名:subString(int beginIndex, int endIndex);
返回值String 方法名:subString(int beginIndex);
2,轉換
2.1將字串變成字串陣列(字串的切割)
返回值String[] 方法名 split(String regex);//新增正規表示式的切割規則
2.2將字串變成字元陣列。
返回值char[] 方法名 toCharArray();
2.3將字串變成位元組陣列
返回值byte[] 方法名getBytes();
2.4將字串中字母轉為大小寫字母
返回值String 方法名toUpperCase();
返回值String 方法名toLowerCase();
2.5將字串中的內容進行替換
返回值String 方法名replace(char oldChar,char newChar);//沒有oldChar則不改變
返回值String 方法名replace(CharSequence target,CharSequence replacement);
也可以理解為
返回值String 方法名replace(String oldString,String newString);因為String類是Sequence的子類
2.6去除字串中兩端的空格
返回值String 方法名trim();
2.7將字串進行連線
返回值String 方法名concat(String s);
2.8將基本資料型別轉換為字串型別
返回值String 方法名ValueOf(基本資料型別);
2.9將字元陣列轉化為字串
可以使用構造方法String(char [] value);
返回值String 方法名copyValueOf(char[] data)
3,判斷
3.1兩個字串內容是否相同
返回值boolean 方法名 equals(Object obj);
返回值boolean 方法名equalsIgnoreCase(String str); //忽略大小寫比較字串內容是否相同。
3.2字串中是否包含指定字串
返回值boolean 方法名contains(String str);
3.3字串是否以指定字串開頭,是否以指定字串結尾
返回值boolean 方法名startsWith(String str);
返回值boolean 方法名endsWith(String str);
4,比較
4.1比較兩個字串的大小
返回值int 方法名compareTo(String str);