黑馬程序員 _Java中的String、StringBuffer、StringBuilder

                                                                         ---------------------- android培訓java培訓、期待與您交流! ---------------------- 


一、String
字符串。既是一個對象,也是一個常量。最大特點就是:一旦被初始化就不可以被改變。

String在內存中的存儲方式:字符串在內存當中有一個常量池,池中是數組,數組在存放字符。
當要存入一個字符串時,會先在池中查找是否有該字符串,若有就不在存儲將已有字符串的地址返回,
若沒有會在池中找到各個字符,然後將其拼成一個新的字符串再返回地址。
String類提供的方法:
1.獲取。
int length();
char charAt(int index);當訪問到字符串中不存在的角標時,拋出StringIndexOutOfBoundsException字符串角標越界異常

int indexOf(int ch):返回的是ch在字符串中第一次出現的位置,不存在時返回-1。注意:字符和整形可以自動轉換,所以此處也可以傳入一個字符。
int indexOf(int ch,int fromIndex)
int indexOf(String str)
int indexOf(String str,int fromIndex)
int lastIndexOf(int ch):反向檢索一個字符出現的位置(有的時候知道要查找的內容在字符串的末尾,使用此方法效率高)
。。。//和indexOf一樣的lastIndexOf方法
2.判斷。
boolean contains(CharSequence s):CharSequence是String和StringBuffer已經實現的接口,所以,這裏可以傳入String和StringBuffer
判斷字符串中是否包含某個內容有兩個方法:1.if(s.contains(str)) 2.if((index=s.indexOf(str))!=-1)
使用哪個方法?--->只判斷用方法1,既要判斷又要獲取位置時使用方法2
boolean isEmpty()
boolean startsWith(String str)
boolean endsWith(String str)
boolean equals(Object obj);比較字符串內容是否相同,複寫了Object中的方法
boolean equalsIgnoreCase(String str);忽略大小寫比較字符串。(登陸郵箱時,字符大小寫忽略不計)
3.轉換。
3.1基本數據類型---->字符串
靜態方法:static String valueOf(...);這裏的參數可以是:8個基本數據類型中除去byte和short的6種、Object
 
3.2字符數組---->字符串
構造函數:String(char[] chs)
 String(char[] chs,int offset,int count);參數意思和valueOf中的一樣
靜態方法:static String copyValueOf(char[] chs)
 static String copyValueOf(char[] chs,int offset,int count)
 
 static String valueOf(char[] data,int offset,int count); 
  將字符數組中的元素,從offset位置開始共計count個元素,轉換成字符串。count是長度
3.3字節數組---->字符串
構造函數:String(byte[] bytes)
 String(byte[] bytes,int offset,int count)
3.4字符串---->字節數組
byte[] getBytes();
3.5字符串---->字符數組
char[] toCharArray();
4.替換。
String replace(char oldchar,char newchar);將字符串中的某個字符替換成另一字符。當舊字符串不存在時,返回原字符串
String replace(String oldchar,String newchar);
5.切割。
String[] split(String regex);按regex將字符串切割
6.子串。獲取字符串中的一部分
String substring(int begin);從begin開始到結尾,若超出角標則拋異常
String substring(int begin,int end);包含頭,不包含尾
7.轉換,去除空格、比較。
7.1將字符串轉換成大寫或小寫
String toUpperCase();
String toLowerCase();
7.2將字符串兩端的空格去除。
String trim();
7.3對兩個字符串進行自然順序的比較
int compareTo(String str);相等時返回0.其實返回的是兩個字符串相減的數 
"aaa".compareTo("abc");//-1  "aaa".compareTo("acc");//-2
常見面試題:String s1="abc"; String s2=new String("abc"); String s3="abc";
問:輸出結果?System.out.println(s1==s2);//false
 System.out.println(s1.equals(s2));//true
 System.out.println(s1==s3);//true
s1和s2有什麼區別? s1有一個對象,s2有兩個對象。
二、StringBuffer和StringBuilder
兩者都是 字符串緩衝區。都用來動態操作字符串。
該緩衝區是一個容器。具有的特點:1.長度是可以變化的 2.可以直接操作多個數據類型 3.最終會通過toString方法變成字符串。
數組也是一個容器,但是長度是固定,一個數組只能操作同一種類型的數據。

StringBuffer提供的方法:
既然是容器就從CURD(增刪改查)來使用方法。
1.存儲(增)。
StringBuffer append(...);將制定數據添加到已有數據結尾處。
這裏的參數可以是:8種基本數據類型中除去byte和short、字符數組、String、StringBuffer、Object、CharSequence。
StringBuffer insert(int index, ...);將數據添加到指定位置index處。
添加的數據可以是字符數組的某一部分--->char[] chs={'a','b','c'}; sb.insert(2,chs,2);
2.刪除。
StringBuffer delete(int start, int end);刪除緩衝區中的數據,包含start,不包含end。
清空緩衝區:sb.delete(0,sb.length());          
StringBuffer deleteCharAt(int index):刪除指定位置的字符 
  3.獲取(查)。
  int length();
  int indexOf(String str);str第一次出現的位置
  int lastIndexOf(String str);
  String substring(start,end);
  char charAt(int index);
4.修改。注意,是將數據修改替換了,而不是添加
StringBuffer replace(int start,int end,String str);替換一個或多個字符,可以將一個字符替換成多個字符。
void setCharAt(int index,char ch);替換一個字符
5.反轉。
StringBuffer reverse();
6.一個特殊方法:
void getChars(int srcBegin,int srcEnd,char[] dst,int dstBegin);
將StringBuffer中指定位置上的數據(從srcBegin到srcEnd-1),賦值給字符數組,且從指定位置dstBegin開始賦值。

三、三者區別
String和StringBuffer的區別(什麼時候使用):
String:字符串。是一個常量,一旦被初始化就不可以被改變。
StringBuffer:字符串緩衝區。可以修改字符串。
所以,當數據的類型、個數不確定,最終要轉換成字符串時,使用字符串緩衝區。
StringBuffer和StringBuilder的區別:
StringBuilder:jdk1.5版本出現。是線程不同步的。將 StringBuilder 的實例用於多個線程是不安全的。
如果需要這樣的同步,則建議使用 StringBuffer
StringBuffer:JDK1.0。是線程同步的。
所以,單線程使用StringBuilder,效率高,不用判斷鎖。
 多線程使用StringBuffer,安全。

                                                                                                ---------------------- android培訓java培訓、期待與您交流!

                                                                                                ----------------------詳細請查看:http://edu.csdn.net/heima

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