Thinking in Java : 13、字符串

1. 不可變String

    String對象是不可變的。String類中每個看起來會修改String值的方法,實際上都是創建了一個全新的String對象,以包含修改後的字符串內容。而最初的String對象則絲毫未動。

public class Welcome{
    public static String upcase(String s) {
        return s.toUpperCase();
    }

    public static void main(String[] args) {
        String q = "howdy";
        String qq = Welcome.upcase(q);
        System.out.println(qq);
        System.out.println(q);
    }
}
/*
HOWDY
howdy
*/

解釋:當把q傳給upcase()方法時,實際傳遞的是引用的一個拷貝。其實,每當把String對象當做方法的參數時,都會複製一份引用,而該引用所指的對象其實一直待在單一的物理位置上,從沒動過。

回到upcase()的定義,傳入其中的引用有了名字s,只有upcase()運行的時候,局部引用s才存在,一旦upcase()運行結束,s就消失了。upcase()的返回值,其實只是最終結果的引用,這足以說明,upcase()返回的引用已經指向了一個新的對象,而原本的q則還在原地。

2. 重載"+"與StringBuilder

String對象可以用“+”來連接。這裏是重載了"+"。其內部實現是創建一個StringBuilder對象,用以構造最終的String,併爲每個字符串調用一次StringBuilder的append()方法,最後調用toString()方法生成結果。

注意:如果你要在toString()方法中使用循環,最好自己創建一個StringBuilder對象,用它來構造最終的結果。

StringBuffer是線程安全的。

3.格式化輸出

   3.1 System.out.format()方法:

             System.out.format("[%d %f]",x,y);輸出整數x,和float型y。

   3.2 String.format("[%d %f]",x,y):一個靜態方法,只返回一個String對象。

4. 正則表達式


用法:String s

   s.matches("正則表達式");輸出true或false

5. 關於字符串轉換

    5.1 字符串轉數組

        char[] chars = String.tocharArray();

   5.2數組轉字符串

       靜態化方法:Arrays.toString(數組) 數組的類型可以爲int[]、short[]、double[]、char[]等,但toString()方法是帶格式的,也就是{"a","b","c"}說輸出的是[a, b, c]

       靜態化方法:String str = String.valueOf(數組); 該數組類型可以爲char[]並不支持int[]、float[],該返回格式爲直接的一個字符串。

   5.3數值型字符串轉數值

        若轉爲int,使用int value = Integer.parseInt(s);

        若轉爲double,使用double value = Double.parseDouble(s);

    數值轉字符串:String s = number+"";

        



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章