最經常使用的對字符串操做的類有三個,分別是String,StringBuilder,StringBuffer,下面將會詳細的說說這三個類......java
String類表明字符串,這個是最基本的對字符串的類,這個也是使用比較多的類,這裏就再也不詳細介紹了正則表達式
new String(String str)
new String(StringBuilder str)
new String(StringBuffer str)
new String(byte[] bys,String charsetName)
經過使用指定的字符集解碼指定的 byte 子數組,構造一個新的 String。
str charAt(int index)
返回指定索引處的字符String concat(String str)
將指定字符串str鏈接到此字符串的結尾,返回鏈接成功後的字符,所以須要接受纔能有效果boolean contains(CharSequence s)
判斷此字符串是否包含指定的char值序列,這裏的 CharSequence是一個接口,能夠直接使用它的子類做爲參數(String,StringBuffer,StringBuild)static String copyValueOf(char[] c)
將字符數組變成字符串而且返回static String copyValueOf(char[] c,int off,int count)
將截取的字符數組變成字符串而且返回,off是開始截取的下標,count是截取的個數boolean endWith(String s)
判斷字符串是不是以s結尾boolean equals(Object o)
用於比較int indexOf(char c)
返回字符c在字符串中第一次出現的索引int indexOf(char c,int fromIndex)
從指定索引處開始搜索,查找第一次出現的索引int indexOf(String str)
返回指定子字符串在此字符串中第一次出現處的索引。int indexOf(String str,int fromIndex)
返回指定子字符串在此字符串中第一次出現處的索引,從指定的索引開始。boolean isEmpty()
int length()
boolean matches(String regex)
是否匹配正則表達式trim()
返回字符串的副本,忽略前導空白和尾部空白。String substring(int beginIndex)
返回一個新的字符串,它是此字符串的一個子字符串。String substring(int beginIndex, int endIndex)
返回一個新字符串,它是此字符串的一個子字符串。String toUpperCase()
使用默認語言環境的規則將此 String 中的全部字符都轉換爲大寫。String[] split(String regex)
根據給定正則表達式的匹配拆分此字符串。String[] split(String regex, int limit)
根據匹配給定的正則表達式來拆分此字符串。char[] toCharArray()
將此字符串轉換爲一個新的字符數組。byte[] getBytes(Charset charset)
使用給定的charset
將此String
編碼到byte
序列,並將結果存儲到新的 byte 數組
- 上面的new String(byte[] bys,String charsetName)這個構造方法很重要,它能夠改變字符串的編碼集(和byte[] getBytes(Charset charset))配合着使用,下面咱們來看一個例子,代碼以下:
/* * InputStreamReader實現了將字節流FileInputStream轉換爲字符流,而後使用轉換來的字節流建立高效流,從而實現高效的讀寫 */ /* * 編碼集(個人eclipse編輯器默認的是utf-8 * 下面將中文字符串的編碼集變爲GBK寫入a.txt文件,由於a.txt默認的是utf-8的所以這裏在文件中顯示的是亂碼 * 而後咱們讀出來的仍是GBK的,由於咱們寫入的是GBK編碼集的,可是個人eclipse是utf-8的編碼集,所以在控制檯上輸出的仍是亂碼 * new String(byte[] bys,String * charsetName)使用這個構造方法將byte數組改變編碼集而且轉換爲utf-8格式的,那麼此次在控制檯上輸出的就不亂碼了 */ // 將GBK格式的中文寫入a.txt文件 File file = new File("src/a.txt"); FileOutputStream fileOutputStream = new FileOutputStream(file); String str = "中"; byte[] by = str.getBytes("GBK"); // 將字符串改成GBK編碼集 fileOutputStream.write(by); fileOutputStream.close(); //從a.txt文件中讀取中文 FileInputStream fileInputStream = new FileInputStream(file); int len; byte[] bys = new byte[4]; while ((len = fileInputStream.read(bys)) != -1) { System.out.println(new String(bys, "GBK")); } fileInputStream.close();
線程安全的可變字符序列。一個相似於
String
的字符串緩衝區,但不能修改。固然最重要的一點就是線程安全,咱們能夠從它的源碼中能夠看出,對於一些操做(append
,insert
..)都是使用了線程控制塊來實現同步,適合與多線程下的使用,源代碼以下:數組
public synchronized StringBuffer append(Object obj) { super.append(String.valueOf(obj)); return this; } public synchronized StringBuffer append(String str) { super.append(str); return this; } public synchronized StringBuffer delete(int start, int end) { super.delete(start, end); return this; } /** * @throws StringIndexOutOfBoundsException {@inheritDoc} * @since 1.2 */ public synchronized StringBuffer deleteCharAt(int index) { super.deleteCharAt(index); return this; }
new StringBuffer(StringBuilder str)
new StringBuffer(String str)
StringBuffer append(str)
將指定類型的str追加到此字符串的後面(String,char,char[],int,double,float,long,StringBuffer,StringBuilder
)StringBuffer insert(int offest, str)
將指定類型的str插入到此序列中,offest表示開始插入的位置的索引,類型有 String,char,char[],int,double,float,long,StringBuffer,StringBuilderString delete(int fromIndex,int endIndex)
移除此序列中的字符串而且返回新的緩衝字符串StringBuffer reverse()
反轉字符串String substring(int start)
返回一個新的 String,它包含此字符序列當前所包含的字符子序列。String substring(int start, int end)
返回一個新的 String,它包含此序列當前所包含的字符子序列。StringBuffer deleteCharAt(int index)
移除此序列指定位置的 char。int length()
長度String toString()
返回此序列中數據的字符串表示形式。
建議優先採用該類,由於在大多數實現中,它比
StringBuffer
要快。可是這個類不是線程安全的,只適合單線程,若是使用多線程推薦使用StringBuffer
,固然使用這個也行,不過須要本身實現同步安全
new StringBuilder(String str)
這個類的經常使用方法和
StringBuffer
的同樣,這裏就再也不一一列舉了,參照上面的便可使用多線程