1. 程式人生 > 實用技巧 >java 操作字串String和StringBuffer

java 操作字串String和StringBuffer


java提供兩個類來操作字串:String和StringBuffer。
如果處理一些小的文字建議使用String類;處理大型文字使用StringBuffer類。
宣告字串變數:String name;
初始化字串變數:name = "lixiansheng";

String類:
  String類的內容和長度不可變,如果對字串進行操作則會生成一個新的例項,不會改變物件例項本身。系統為String類物件分配記憶體時,是按照當前物件所包含的實際字元數分配的。
StringBuffer類:
  StringBuffer類處理可變字串,如果要修改一個StringBuffer類的字串,不需要再建立新的字串物件,而是直接操作原有字串。系統為StringBuffer物件分配記憶體時,除了當前字元所佔空間外,還提供一個16字元大小的緩衝區。

String類處理字串
  1.字串類的預設構造器:
    “String()”是最簡單的構造器,也是系統預設的構造器,是不帶引數的。
    String name = new String(); //建立一個空的字串

  2.位元組引數的構造器
    String(byte[] byte)將位元組陣列中的元素作為字串物件。
    byte[] byte = {97, 98, 99};
    String str = new String(byte);
    輸出結果為: abc

   3.獲取指定位元組數的構造器
    String(byte[], int begin, int length) 含義為:將位元組陣列中從“begin”指定位置開始到“length”長度結束,獲取其中間的元素作為字串物件。 注意陣列是從0開始的。
    byte[] byte = {97,98,99,100,101,102};
    String str = new String(byte, 3, 2);
    輸出結果為: de


   4.將位元組型資料轉換為字符集輸出的構造器
    String(byte[] byte, int begin, int length, String chatsName) 含義為:獲取位元組陣列中從第“begin”開始到“length”長度結束字元,形成字串物件,然後按照“charname”字符集輸出。
    字符集一般有:“us-ascii”, "iso-8859-1","utf-8","utf-16be","utf-16le","utf-16"等樣式。
    byte[] byte = {97,98,99,100,101,102};
    String str = new String(byte, 3, 2, "utf-8");
    輸出結果為: de

  5.字元陣列構造器
    String(char[], int begin, int length) 含義為:將位元組陣列中從“begin”指定位置開始到“length”長度結束,獲取其中間的字元連城字串。 注意陣列是從0開始的。
    char[] char = {"w", "e", "l", "c", "o", "m", "e"};
    String str = new String(char, 3, 4); //從3開始,擷取4位
    輸出結果為: come

String類字串處理方法
  主要講:字串連結 提取子串 從字串中提取一個指定的字元 字串長度 檢查字串是否相等 查詢特定字串 從基本型別轉換成字串等
  1.字串連結

    有兩種方法連結字串:一是使用“+”,另一種是使用方法函式concat(String str).

    

String str1 = "I am";
        String str2 = "a tester!";
        //使用"+"
        System.out.println(str1 + " " + str2);
        //使用concat
        System.out.println(str1.concat(" ").concat(str2));

輸出結果:
I am a tester!
I am a tester!

  

  2.提取子字串
    1)“substring(int index)” 是提取從index指定的位置開始,一直到字串最後。
    2)“substring(int begin, int end)" 是提取從begin到end位置的字串。

public static void main(String[] args) {
        String str1 = "I am a tester!";
        //substring(int index)
        System.out.println(str1.substring(7));
        //substring(int begin, int end)
        System.out.println(str1.substring(5,12));
    }

輸出結果:
tester!
a teste

  3.從字串中提取一個指定字元

    charAt(int index),這個方法返回的是一個字元。

public static void main(String[] args) {
        String str1 = "I am a tester!";
        //獲取位置為3的字元
        System.out.println(str1.charAt(3));
    }

輸出結果:
m

  4.獲取字串長度
    str.length().返回字串長度,型別為int。注意字串長度length()是方法,陣列長度length是屬性。

public static void main(String[] args) {
        String str1 = "I am a tester!";
        //獲取長度
        System.out.println(str1.length());
    }

輸出結果:
14  

  5.檢查字串是否相等
    str.equals(str1) 返回true或者false
    str.equalsIgnoreCase(str) 這個方法忽略字串大小寫

public static void main(String[] args) {
        String str1 = "tester";
        String str2 = "tester";
        String str3 = "Tester";

        System.out.println(str1.equals(str2));
        System.out.println(str1.equals(str3));
        System.out.println(str1.equalsIgnoreCase(str3));
    }

輸出結果:
true
false
true

  6.查詢特定字元
    1)indexOf(子串內容) 子串如果存在str內,則返回首位子串的位置,如子串“sdf”則返回“s”位置;如子串不存在str內,返回負數。
    2)startsWith(子串內容) 測試字串是否是子串開頭。
    3)endsWith(子串內容)測試字串是否是子串結尾。

public static void main(String[] args) {
        String str1 = "tester";

        System.out.println(str1.indexOf("es"));
        System.out.println(str1.indexOf("esd"));
        System.out.println(str1.startsWith("te"));
        System.out.println(str1.startsWith("a"));
        System.out.println(str1.endsWith("er"));
        System.out.println(str1.endsWith("A"));
    }
輸出結果:
1
-1
true
false
true
false

  7.從基本型別轉換成字串
    valueOf() 將基本型別資料轉換成相應的字串

    int str2= 123;
    String str3 = String.valueOf(str2);


StringBuffer快取字串處理類
  1.預設構造器

public static void main(String[] args) {
        StringBuffer str = new StringBuffer();
        System.out.println(str.length());  //輸出字串長度
        System.out.println(str.capacity()); //輸出字串容量
    }
輸出結果:
0
16

  2.設定容量大小的構造器
    StringBuffer str = new StringBuffer(int x);
    擴容:str.ensureCapacity(int x);

public static void main(String[] args) {
        StringBuffer str = new StringBuffer(10);
        System.out.println(str.length());  //輸出字串長度
        System.out.println(str.capacity()); //輸出字串容量
        str.ensureCapacity(40);
        System.out.println(str.length());
        System.out.println(str.capacity());
    }
輸出結果:
0
10
0
40

  3.處理快取字串
    1)初始化字串

public static void main(String[] args) {
        StringBuffer str = new StringBuffer("老李是名優秀的測試");
        str.append("工程師"); //新增到末尾
        System.out.println(str);
        str.setLength(2);//設定字串長度
        System.out.println(str);
    }
輸出結果:
老李是名優秀的測試工程師
老李

    2)取字串的單個字元

str.charAt(int index)
StringBuffer str = new StringBuffer("老李是名優秀的測試");
        System.out.println(str.charAt(3));
輸出結果:
名

    3)單個字元賦值

str.setCharAt(int index,'字元');
 public static void main(String[] args) {
        StringBuffer str = new StringBuffer("老李是名優秀的測試");
        str.setCharAt(0,'小');
        System.out.println(str);
    }
輸出結果:
小李是名優秀的測試

    4)指定位置插入字串

str.insert(int index, str)
public static void main(String[] args) {
        StringBuffer str = new StringBuffer("老李是名優秀的測試");
        str.insert(9,"工程師");
        System.out.println(str);
    }
輸出結果:
老李是名優秀的測試工程師

    5)返回字串子串

str.substring(int index)
public static void main(String[] args) {
        StringBuffer str = new StringBuffer("老李是名優秀的測試");
        System.out.println(str.substring(7));
    }
輸出結果:
測試

    6)倒置字串內容

str.reverse()
public static void main(String[] args) {
        StringBuffer str = new StringBuffer("老李是名優秀的測試");
        System.out.println(str.reverse());
    }
輸出結果:
試測的秀優名是李老