1. 程式人生 > >java基礎(四):字串

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是個臨界值