1. 程式人生 > >String、StringBuilder和StringBuffer類

String、StringBuilder和StringBuffer類

attr substring 匹配 忽略 ren set area all position

簡介

String/StringBuilder/StringBuffer這3個類都能創建字符串對象,它們都繼承自Object類。

其中String對象一經創建,空間固定不變,無法再向其中增、刪數據。即使提供了replace()方法,但也是一個字符對應一個字符的替換。總之它的空間大小不變。

而後兩者都是可變空間的String對象,因此它們都提供了append()方法、insert()方法以及delete()等修改空間數據的功能。StringBuilder類是StringBuffer類的簡版,但效率更高,且它們提供的功能是完全一致的。因此在StringBuilder能滿足要求時,建議使用StringBuilder類而非StringBuffer類。

StringBuilder類和StringBuffer類

它們的使用方法完全一致。因此以StringBuilder類為例。

該類用於創建String類,並提供向String數據中插入、刪除數據的功能。它最主要的兩個方法是append()和insert()。

構建String對象:

StringBuilder sb1 = new StringBuilder();  //對象中包含空字符串
StringBuilder sb2 = new StringBuilder("ac");  //對象中包含字符串ac
System.out.println(sb1);
System.out.println(sb2);

append()方法用於向已有String對象的尾部追加字符串數據,如果數據不是字符串類型,則會使用toString()方法轉換為String類型。

StringBuilder sb = new StringBuilder("ac");
sb.append("xx");
sb.append(3);
sb.append(3.12);
System.out.println(sb);  //return value: acxx33.12

insert()方法用於向指定位置處插入數據。

StringBuilder sb = new StringBuilder("ac");
sb.append("xx");     //acxx
sb.append(3);        //acxx3
sb.append(3.12);     //acxx33.12
sb.insert(3,"x");    //acxxx33.12
sb.insert(3,2.12);   //acx2.12xx33.12

還有以下一些String相關的通用方法,其中如果包含start、end位置的方法,一般都不會計算end邊界。

  • charAt(int n):返回對象中指定字符位置的字符,位置從0開始計算。
  • delete(int start,int end):刪除從位置start到end位置處的子串並返回。不包含end邊界。
  • deleteCharAt(int n):刪除指定位置處的字符並返回。
  • indexOf(String str):取得從左算起str第一次出現的位置。
  • lastIndexOf(String str):取得從右算起str第一次出現的位置。
  • lenght():返回字符串長度。
  • replace(int start,int end,String str):從start到end位置處(不包含end邊界)替換為str。
  • reverse():反轉字符串。
  • substring(int n):截取從位置n開始到結尾的子串。
  • substring(int start,int end):截取從位置start到end處(不包含end邊界)的子串。
  • toString():重寫Object類的toString()方法。將StringBuilder對象轉換為String對象。

String類

幾個重要的方法:

  • equals(Object obj)和equalsIgnoreCase(Object obj)
    比較兩個對象是否相等。String類的equals()方法重寫後的比較行為是:僅當兩對象的內容相等時,equals()才返回true。

    String a = String.valueOf(123);
    String b = new String("123");
    System.out.println(a.equals(b));  //true
    
  • compareTo(String str)和compareToIgnoreCase(String str)
    繼承自接口Comparable,重寫後的方法按照字典順序將String對象和str比較,當String對象比str小時返回負數,大時返回正數,相等時返回0。只有當equals()返回true時compareTo()才返回0。

  • split(String regexp):將String按照指定的regexp劃分為String[]數組。

    String b = new String("123 xyz 456");
    String[] c = b.split(" ");      //c={"123","xyz","456"}
    
  • valueOf(type value):將給定type類型的數據value轉換為String類型並封裝到String對象中。

    String a = String.valueOf(123);   //int --> String
    String a = String.valueOf(12.3);  //double --> String
    

還有些其他方法:

  • charAt(int n):返回對象中指定字符位置的字符,位置從0開始計算。
  • concat(String str):將指定字符串str連接到該字符串的尾部。
  • contains(String str):String對象中是否包含str子串,如果為真則返回true,否則返回false。
  • contentEquals(String str):如果該String對象的內容為str,則返回true,否則返回false。
  • contentEquals(StringBuffer s):如果該String對象和StringBuffer對象s的內容相同,則返回true,否則返回false。同樣適用於StringBuilder類對象。
  • startsWith(String str):測試String對象是否以str子串為前綴。返回boolean類型。
  • endsWith(String str):測試String對象是否以str子串為結尾的後綴。返回boolean類型。
  • indexOf(String str):取得從左算起str第一次出現的位置。
  • lastIndexOf(String str):取得從右算起str第一次出現的位置。
  • lenght():返回字符串長度。
  • isEmpty():該String對象中是否含有數據。即length返回0時為真。
  • matchs(String regexp):String對象是否能被正則表達式regexp匹配上。
  • replace(char o,char n):將String中的o字符替換為新的n字符。
  • substring(int n):截取從位置n開始到結尾的子串。
  • substring(int start,int end):截取從位置start到end處(不包含end邊界)的子串。
  • toLowerCase():返回小寫字母。
  • toUpperCase():返回小寫字母。
  • trim():返回該String忽略前導和後導空格後的副本。
  • toString():重寫Object類的toString()方法。將String對象轉換為String對象。其實它自身就是String類型。
  • toCharArray():將String返回為一個char數組。
  • getChars(s,e,char[] c,c_s):將String對象中從s位置開始到e結束(不包含e邊界位置)的字符復制到char數組c中的c_s位置處。
    String s = new String("acde");
    char[] sb1 =  s.toCharArray();  //sb1 = {a,c,d,e}
    char[] sb2 = new char[3];
    s.getChars(0,3,sb,0);           //sb2 = {a,c,d}
    

int[]數組轉String[]數組

例如,有一個int[]數組,想將該數組轉換為String[]。這相當於重寫一個"String[] toString(int[] arr)"方法。

import java.util.*;
    //int[]-->String[]
    public static String[] toString(int[] arr) {
        String[] sarr = new String[arr.length];
        for (int i=0;i<arr.length;i++) {
            sarr[i] = Integer.valueOf(arr[i]).toString();
        }
        return sarr;
    }

public class TestToString {
    public static void main(String[] args) {
        int[] arr = {12,3,4,5,66};
        String[] sarr = toString(arr);
        System.out.println(Arrays.toString(sarr));
    }
}

int[]數組轉String字符串

例如int[]數組{1,2,3,4}轉成字符串,結果為"1 2 3 4"。即將數組中的值變為字符串並使用空格分隔。

public class IntToString {

    // int[] --> String
    public static String toString(int[] arr) {
        StringBuilder sarr = new StringBuilder();
        for (int i=0;i<arr.length;i++) {
            if (i != arr.length - 1) {
                sarr.append(arr[i] + " ");
            } else {
                sarr.append(arr[i]);
            }
        }
        return sarr.toString();
    }

    public static void main(String[] args) {
        int[] arr = {12,3,4,5,66};
        String sarr = toString(arr);
        System.out.println(sarr);
    }
}

轉載請註明出處:http://www.cnblogs.com/f-ck-need-u/p/7782141.html

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!

String、StringBuilder和StringBuffer類