天天看點

黑馬程式員---String字元串、StringBuffer 、StringBuilder

                             關于Java中的:String字元串、StringBuffer 、StringBuilder                  --------- android教育訓練、java教育訓練、java學習型技術部落格、期待與您交流! ------------

--< java.lang >-- String字元串:   String類概述   字元串這類事物,被看成是一個對象,字元串對象   就有描述這個對象類,java.lang.String類   是被final修飾的類,不能去繼承String類   String 類代表字元串。Java 程式中的所有字元串字面值(如 "abc" )都作為此類的執行個體實作。   java中,寫上 "" 就是String類的對象執行個體

java中用String類進行描述。對字元串進行了對象的封裝。這樣的好處是可以對字元串這種常見資料進行友善的操作。對象封裝後,可以定義N多屬性和行為。

如何定義字元串對象呢?String s = "abc";隻要是雙引号引起的資料都是字元串對象。

特點:字元串一旦被初始化,就不可以被改變,存放在方法區中的常量池中。

//===============================================================

String s1 = "abc"; // s1指向的記憶體中隻有一個對象abc。

String s2 = new String("abc"); // s2指向的内容中有兩個對象abc、new 。

System.out.println(s1==s2);//false

System.out.println(s1.equals(s2));//true ,字元串中equals比較的是字元串内容是否相同。

//===============================================================

字元串的方法:

1:構造方法:将位元組數組或者字元數組轉成字元串。 new String()

  A. 将位元組數組轉成字元串      String(byte[] bytes)将所有的元素轉成字元串對象,但是查詢本機預設碼表GBK      String(byte[] bytes,int start,int length)将位元組數組一部分轉成字元串對象,查詢GBK   B. 将字元數組轉成字元串      String(char[] ch)将所有的元素轉成字元串對象,不查詢編碼表      String(char[] ch,int start ,int length)将字元串數組一部分轉成字元串對象,不查編碼表

     String s1 = new String();//建立了一個空内容的字元串。 

     String s2 = null;//s2沒有任何對象指向,是一個null常量值。

     String s3 = "";//s3指向一個具體的字元串對象,隻不過這個字元串中沒有内容。

     //一般在定義字元串時,不用new。

     String s4 = new String("abc");

     String s5 = "abc"; 一般用此寫法

2. String的判斷方法,結果都是布爾   A. equals(Object obj)比較兩個字元串是否完全相等   B. equalsIgnoreCase(String s)比較兩個字元串是否完全相等,忽略大小寫   C. startsWith(String s)判斷一個字元串是否以另一個字元串開頭   D. endsWith(String s)判斷一個字元串是否以另一個字元串結尾   E. isEmpty()判斷一個字元串是否有内容,一個字元都沒有結果就是真   F. contains(String s)判斷一個字元串是否包含另一個字元串 3. String類的擷取方法   A. char charAt(int)傳遞索引,傳回單個字元   B. int indexOf(char ch)傳遞字元,傳回第一次出現索引,找不到傳回<0   C. int indexOf(char ch,int fromindex)傳遞字元,傳回第一次出現索引,找不到傳回<0,指定開始查找位置   D. int indexOf(String s)   E. int indexOf(String s,int fromindex)   F. int lastIndexOf(char ch)傳遞字元,傳回最後次出現索引,找不到傳回<0,反向索引   G. int lastIndexOf(char ch,int fromindex)傳遞字元,傳回最後次出現索引,找不到傳回<0     第二個參數,過濾這個索引以後的全部内容   H. int lastIndexOf(String s)   I. int lastIndexOf(String s,int fromindex)   J.  int length()擷取字元串中字元串個數,字元串的長度   K. String  substring(int start,int end)擷取字元串一部分,包含頭,不包含尾   L. String substring(int index)擷取一部分,從這個索引開始,後面全要 //截取 4. String類的轉換方法   A. getBytes() 将字元串轉成位元組數組,查詢編碼表   B. toCharArray()字元串轉成字元數組,不查詢編碼表   C. toUpperCase()轉成大寫   D. toLowerCase()轉成小寫   E. static valueOf()任意類型轉成字元串 5. String類的其他方法   A. String[]   split()切割字元串   B. String replace()替換字元串   注意:修改後變成新字元串,并不是将原字元串直接修改。   C. String   trim()去掉兩端空格   D. int compareTo()字典順序比較字元串       //如果參數字元串等于此字元串,則傳回值 0;如果此字元串按字典順序小于字元串參數,則傳回一個      //小于 0 的值;如果此字元串按字典順序大于字元串參數,則傳回一個大于 0 的值。   E .String  concat (string); //對字元串進行追加。

//===============================================================

--< java.lang >-- StringBuffer字元串緩沖區:

構造一個其中不帶字元的字元串緩沖區,初始容量為 16 個字元。

特點:

1:可以對字元串内容進行修改。

2:是一個容器。

3:是可變長度的。

4:緩沖區中可以存儲任意類型的資料。

5:最終需要變成字元串。

容器通常具備一些固定的方法:

1,添加。

StringBuffer append(data):在緩沖區中追加資料。追加到尾部。

StringBuffer insert(index,data):在指定位置插入資料。

2,删除。

StringBuffer delete(start,end);删除從start至end-1範圍的元素

StringBuffer deleteCharAt(index);删除指定位置的元素

//sb.delete(0,sb.length());//清空緩沖區。

3,修改。

StringBuffer replace(start,end,string);将start至end-1替換成string

void setCharAt(index,char);替換指定位置的字元

void setLength(len);将原字元串置為指定長度的字元串

4,查找。(查不到傳回-1)

int indexOf(string); 傳回指定子字元串在此字元串中第一次出現處的索引。

int indexOf(string,int fromIndex);從指定位置開始查找字元串

int lastIndexOf(string); 傳回指定子字元串在此字元串中最右邊出現處的索引。

int lastIndexOf(string,int fromIndex); 從指定的索引開始反向搜尋

5,擷取子串。

string substring(start); 傳回start到結尾的子串

string substring(start,end); 傳回start至end-1的子串

6,反轉。

StringBuffer reverse();字元串反轉

//===============================================================

--< java.lang >-- StringBuilder字元串緩沖區:

JDK1.5出現StringBuiler;構造一個其中不帶字元的字元串生成器,初始容量為 16 個字元。該類被設計用作 StringBuffer 的一個簡易替換,用在字元串緩沖區被單個線程使用的時候(這種情況很普遍)。

方法和StringBuffer一樣;

StringBuffer 和 StringBuilder 的差別:

StringBuffer線程安全。

StringBuilder線程不安全。

單線程操作,使用StringBuilder 效率高。

多線程操作,使用StringBuffer 安全。

//===============================================================

StringBuilder sb = new StringBuilder("abcdefg");

sb.append("ak");  //abcdefgak

sb.insert(1,"et");//aetbcdefg

sb.deleteCharAt(2);//abdefg

sb.delete(2,4);//abefg

sb.setLength(4);//abcd

sb.setCharAt(0,'k');//kbcdefg

sb.replace(0,2,"hhhh");//hhhhcdefg

//想要使用緩沖區,先要建立對象。

StringBuffer sb = new StringBuffer();

sb.append(12).append("haha");//方法調用鍊。

String s = "abc"+4+'q';

s = new StringBuffer().append("abc").append(4).append('q').toString();

//===============================================================

class  Test{

public static void main(String[] args) {

String s1 = "java";

String s2 = "hello";

method_1(s1,s2);

System.out.println(s1+"...."+s2); //java....hello

StringBuilder s11 = new StringBuilder("java");

StringBuilder s22 = new StringBuilder("hello");

method_2(s11,s22);

System.out.println(s11+"-----"+s22); //javahello-----hello

}

public static void method_1(String s1,String s2){

s1.replace('a','k');

s1 = s2;

}

public static void method_2(StringBuilder s1,StringBuilder s2){

s1.append(s2);

s1 = s2;

}

}

案例:字元串緩沖區自定義翻轉 public class StringBufferTest {  public static void main(String[] args) {   StringBuilder builder = new StringBuilder();   builder.append("123true");   myReverse(builder);   System.out.println(builder);  }  //字元串緩沖區翻轉,使用者傳遞的就是一個緩沖區,翻轉後,傳回一個緩沖區  private static StringBuilder myReverse(StringBuilder builder)  {   //将緩沖區轉成String類型   String s = builder.toString();   //通過字元串,轉成字元數組   char[] ch = s.toCharArray();   //對數組進行翻轉   for(int x=0,y=ch.length-1;x<y;x++,y--)   {     char temp = ch[x];     ch[x] = ch[y];     ch[y] =temp;   }   //将數組變成緩沖區傳回   return builder.delete(0, builder.length()).append(ch);  }  //使用數組翻轉,使用一個int類型數組,實作翻轉  private static void method()  {   int[] arr ={3,2,1,5,6,9};   for(int x=0,y=arr.length-1;x<y;x++,y--)   {    //定義零時變量,存儲數組的0下标:整體思路就是頭和尾互換    int temp = arr[x];    //将數組的    arr[x]=arr[y];    arr[y]= temp;   }   for(int x=0; x<arr.length; x++)   {    System.out.println(arr[x]);   }  } }

                 --------- android教育訓練、java教育訓練、java學習型技術部落格、期待與您交流! ------------