字符串的基本操作


String類的概述

  JDK提供的API,查看String類的說明可以看到下面兩句話

  字符串字面值"abc"也可以看成是一個字符串對象。
  字符串是常量,一旦被賦值,就不能被改變。

String類的構造方法

方法 說明
public String() 空構造
public String(byte[] bytes) 把字節數組轉成字符串
public String(byte[] bytes,int index,int length) 把字節數組的一部分轉成字符串
public String(char[] value) 把字符數組轉成字符串
public String(char[] value,int index,int count) 把字符數組的一部分轉成字符串
public String(String original) 把字符串常量值轉成字符串

String類的判斷功能

方法 說明
boolean equals(Object obj) 比較字符串的內容是否相同,區分大小寫
boolean equalsIgnoreCase(String str) 比較字符串的內容是否相同,忽略大小寫
boolean contains(String str) 判斷大字符串中是否包含小字符串
boolean startsWith(String str) 判斷字符串是否以某個指定的字符串開頭
boolean endsWith(String str) 判斷字符串是否以某個指定的字符串結尾
boolean isEmpty() 判斷字符串是否為空。

String類的獲取功能

方法 說明
int length() 獲取字符串的長度。
char charAt(int index) 獲取指定索引位置的字符
int indexOf(int ch) 返回指定字符在此字符串中第一次出現處的索引。
int indexOf(String str) 返回指定字符串在此字符串中第一次出現處的索引。
int indexOf(int ch,int fromIndex) 返回指定字符在此字符串中從指定位置后第一次出現處的索引。
int indexOf(String str,int fromIndex) 返回指定字符串在此字符串中從指定位置后第一次出現處的索引。
String substring(int start) 從指定位置開始截取字符串,默認到末尾。
String substring(int start,int end) 從指定位置開始到指定位置結束截取字符串。

String類的轉換功能

方法 說明
byte[] getBytes() 把字符串轉換為字節數組。
char[] toCharArray() 把字符串轉換為字符數組。
static String valueOf(char[] chs) 把字符數組轉成字符串。
static String valueOf(int i) 把int類型的數據轉成字符串。
注意:String類的valueOf方法可以把任意類型的數據轉成字符串
String toLowerCase() 把字符串轉成小寫。(了解)
String toUpperCase() 把字符串轉成大寫。
String concat(String str) 把字符串拼接。

String其他類型互轉匯總

其它類型轉成String類型

  • toString()

  • Object類中有public方法toString(),java對象都可以調用。注意:必須保證類對象不能為null值,否則拋出NullPointerException異常,派生類中一般覆蓋此方法。

  • (String)

  • 強制類型轉換,需要保證能夠轉成String,前面使用instanceof進行檢查,否則拋出CalssCastException異常。注意:語法檢查時不會報錯,用時一定要小心。

  • valueOf(基本類型 i)

  • 與第一種類似,只是前者不能為null,后者可以為null。

  • ""+

  • 效率上toString()>String.valueOf>i+””

String類型轉成其它類型

  • valueOf(String str)

  • 可以把任意類型的數據轉成字符串

  • parseLong(String str)和parseInt(String str)

  • 注:基本類型數據級別(byte/short/char)->int->long->float->double
    低級別向高級別自動轉換;高級別向低級別強制轉換會導致溢出或丟失精度

附:基本類型與包裝類類型轉換
正向:Integeri=new Integer(100);

反向:int b=i.intValue();

特殊:int i=Integer.parseInt(“1234”);//可以通過

   floatf=Float.valueOf("1234").floatValue();

   charc=Character.valueOf(“1233”).charValue();

String、StringBuffer與StringBuilder之間區別

StringBuffer常用方法(StringBuilder的省略)

(由於StringBuffer和StringBuilder在使用上幾乎一樣,所以只寫一個)

構造方法

方法 說明
publicStringBuffer() 初始化出的StringBuffer對象是一個空的對象
publicStringBuffer(int capacity) 分配了長度為capacity字節的字符緩沖區
publicStringBuffer(String str) 創建帶有內容的StringBuffer對象

例子
 StringBuffer s = new StringBuffer();
   這樣初始化出的StringBuffer對象是一個空的對象

 StringBuffer sb1=new StringBuffer(512);
   分配了長度512字節的字符緩沖區。

 StringBuffer sb2=new StringBuffer(“how are you?”)
  創建帶有內容的StringBuffer對象,在字符緩沖區中存放字符串“how are you?”

常用方法

方法 說明
StringBuffer append(boolean b) 表示將括號里的某種數據類型的變量插入某一序列中
charAt( ) 返回此序列中指定索引處的 char 值
getChars(int start,int end,char chars[],int charStart) 將字符串的子字符串復制給數組
int length() 返回長度(字符數)。
toString( ) 返回此序列中數據的字符串表示形式。
subString( ) 返回一個新的 String,它包含此序列當前所包含的字符子序列。
StringBuffer delete(int start,int end) 刪除指定區間以內的所有字符,包含start,不包含end索引值的區間。
StringBuffer deleteCharAt(int index) 刪除指定位置的字符,然后將剩余的內容形成新的字符串
StringBuffer insert(int offset, Object obj) 該方法的作用是在StringBuffer對象中插入內容,然后形成新的字符串。
StringBuffer reverse() 將StringBuffer對象中的內容反轉,然后形成新的字符串
void setCharAt(int index, char ch) 修改對象中索引值為index位置的字符為新的字符ch
void trimToSize() 將StringBuffer對象的中存儲空間縮小到和字符串長度一樣的長度,減少空間的浪費,和String的trim()是一樣的作用。

執行速度比較

對字符串操作三者在執行速度方面的比較

  StringBuilder > StringBuffer > String

  String <(StringBuffer,StringBuilder)的原因

    String:字符串常量

    StringBuffer:字符創變量

    StringBuilder:字符創變量

    從上面的名字可以看到,String是“字符創常量”,也就是不可改變的對象。

String s = "abcd";
s = s+1;
System.out.print(s);// result : abcd1

 JVM是這樣解析這段代碼的:首先創建對象s,賦予一個abcd,然后再創建一個新的對象s用來;執行第二行代碼,也就是說我們之前對象s並沒有變化,所以我們說String類型是不可改變的對象了,由於這種機制,每當用String操作字符串時,實際上是在不斷的創建新的對象,而原來的對象就會變為垃圾被GC回收掉,可想而知這樣執行效率會有多底。

 而StringBuffer與StringBuilder就不一樣了,他們是字符串變量,是可改變的對象,每當我們用它們對字符串做操作時,實際上是在一個對象上操作的,這樣就不會像String一樣創建一些而外的對象進行操作了,當然速度就快了。

StringBuilder與 StringBuffer

  StringBuilder:線程非安全的

  StringBuffer:線程安全的

  當我們在字符串緩沖去被多個線程使用是,JVM不能保證StringBuilder的操作是安全的,雖然他的速度最快,但是可以保證StringBuffer是可以正確操作的。當然大多數情況下就是我們是在單線程下進行的操作,所以大多數情況下是建議用StringBuilder而不用StringBuffer的,就是速度的原因。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM