本系列部落格彙總在這裡:Java系列_彙總
目錄
- 一、StringBuffer 概述
- 二、StringBuffer 和 String 的差別
- 三、StringBuffer 的 append 方法
- 四、可變字元串的追加
- 五、StringBuffer 類的部分方法
- 六、可變字元串的修改
-
- 1、插入
- 2、删除
- 3、替換
- 4、字元串的反轉
- 5、某個字元串倒序索引
- 6、以上 3、4、5 示例
一、StringBuffer 概述
StringBuffer:字元串緩沖區。
- String一旦被建立後,值不能改變,如果參與了操作,引用發生了變化,不是在原有的字元串上操作,而是産生了一個字元串。但是 StringBuffer 一旦發生改變,就是在原有的基礎上改變的。
-
示例
String
StringBufferString s = “hello”; s += “world”; System.out.println(s);//helloworld
StringBuffer b = “hello”; b +=”world”;//使用hello的空間追加world,不是建立一個字元串。 System.out.println(s);//helloworld
- 關于線程: StringBuffer是線程安全的,效率稍低。
- append 方法
-
package cn.tx; public class Demo { public static void main(String[] args) { /** * append(boolean b) 描述:将 boolean參數的字元串表示附加到序列中。 */ // 建立可變字元串,因為StringBuffer類裡有StringBuffer()構造器,是以可以直接new StringBuffer sb = new StringBuffer(); // 把可變字元串做追加字元true StringBuffer sb1 = sb.append(true); // System.out.println(sb1); // 判斷StringBuffer追加後的字元串的位址是否相等 System.out.println(sb == sb1); /** * 對比String */ String str = "abc"; // 字元串加上任何類型傳回的都是字元串,加上字元true String str1 = str + true; // System.out.println(str1); // 判斷String追加後的字元串的位址是否相等 System.out.println(str == str1); /** * 其餘append()不再示範,詳見API */ } }
- StringBuffer 的構造器
-
package cn.tx; public class Demo { public static void main(String[] args) { // 構造器一 StringBuffer sb = new StringBuffer(); /** * length() 描述:傳回長度(字元數)。 */ System.out.println("可變字元串的長度:" + sb.length()); /** * capacity() 描述:傳回目前容量。 */ System.out.println("可變字元串的容量:" + sb.capacity()); /** * 追加後 */ // 追加後的長度及容量變化,容量預設是16(可指定),未滿16,容量不會發生變化 sb.append("liuchengjuan^_^kangyanfeng"); System.out.println("可變字元串的長度為:" + sb.length() + "容量為:" + sb.capacity()); /** * 指定容量的建立 */ // 建立一個10個容量的字元串(構造器二) StringBuffer sb1 = new StringBuffer(10); sb1.append("liuchengjuan^_^kangyanfeng"); System.out.println("可變字元串的長度為:" + sb1.length() + "容量為:" + sb1.capacity()); /** * 帶參建立 */ // 建立一個帶有字元串參數的可變字元串(構造器三) StringBuffer sb2 = new StringBuffer("liuchengjuan^_^kangyanfeng"); System.out.println("可變字元串的長度為:" + sb2.length() + "容量為:" + sb2.capacity()); } }
- 更多參見 API
-
package cn.tx; public class Demo { public static void main(String[] args) { // 建立可變字元串,開辟一個預設是16 個字元的空間 StringBuffer sb = new StringBuffer(); sb.append(true).append('q')// 位元組 .append(new char[] { 'l', 'c', 'j' })// 數組 .append("kang")// 字元串 .append(100d)// double .append(14.5f)// float .append(13);// int System.out.println(sb); // 可變字元串對象的追加 Person p = new Person(); p.setIdcard("520"); p.setName("劉成娟"); p.setAge("18"); p.setGender("1"); // 追加了一個Person類的對象,列印拼接的應該是Person類toString的值 sb.append(p); System.out.println(sb); StringBuffer sb1 = new StringBuffer("liuchengjuan"); // 可變字元串1追加可變字元串2 sb.append(sb1); System.out.println(sb); } }
package cn.tx; public class Person { private String idcard; private String name; private String age; private String gender; public String getIdcard() { return idcard; } public void setIdcard(String idcard) { this.idcard = idcard; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } @Override public String toString() { return "Person [idcard=" + idcard + ", name=" + name + ", age=" + age + ", gender=" + gender + "]"; } }
六、可變字元串的修改
StringBuffer 字元串處理。
-
package cn.tx; public class Demo { public static void main(String[] args) { StringBuffer sb = new StringBuffer("liuchengjuan"); // sb.insert(2, true); /** * insert(int offset, String str) 描述: 将字元串插入到此字元序列中。 */ // 在指定的索引位置插入字元串,注意不要出現字元串索引越界的問題 sb.insert(2, "kang"); System.out.println(sb); /** * insert(int offset, char[] str) miaoshu :在此序列中插入 char數組參數的字元串表示形式。 */ // 插入數組 sb.insert(3, new char[] { 'k', 'y', 'f' }); System.out.println(sb); /** * insert(int index, char[] str, int offset, int len) 描述:在此序列中插入 * str數組參數的子陣列的字元串表示形式。 */ // 第一個參數是要插入的索引位置,第二個參數是要插入的字元數組,第三個參數是數組的起始索引,第四個參數是要插入的長度 // 在字元串索引3的位置處插入數組cs索引從1開始往後2長度的字元串 char[] cs = { 'j', 'u', 'a', 'n' }; sb.insert(3, cs, 1, 2); System.out.println(sb); /** * 其餘insert不再示範,詳見API */ } }
-
package cn.tx; public class Demo { public static void main(String[] args) { StringBuffer sb = new StringBuffer("juan"); /** * delete(int start, int end) 描述: 删除此序列的子字元串中的字元。 */ // 第一個是删除的開始索引,第二個是結束索引(删除包含開始索引,不包含結束索引) // 有點數組越界的味道,但是不是數組越界,此處沒有這個概念 sb.delete(2, 4); System.out.println(sb); /** * deleteCharAt(int index) 描述:删除 char在這個序列中的指定位置。 */ // 删除指定索引位置的字元(此處有越界的概念 ) sb.deleteCharAt(1); System.out.println(sb); } }
-
package cn.tx; public class Demo { public static void main(String[] args) { StringBuffer sb = new StringBuffer("juan"); /** * replace(int start, int end, String str) 描述:用指定的String中的字元替換此序列的子字元串中的 String。 */ // 第一個參數是替換的開始索引,第二個參數是替換的結束索引,第三個參數是替換的字元串 sb.replace(1, 3, "kang"); System.out.println(sb); /** * reverse() 描述:導緻該字元序列被序列的相反代替。 */ // 字元串反轉 sb.reverse(); System.out.println(sb); /** * lastIndexOf(String str) 描述:傳回指定子字元串最右邊出現的字元串内的索引。 */ // 獲得倒數第一次出現的字元串索引 int lastIndex = sb.lastIndexOf("n"); System.out.println(lastIndex); /** * lastIndexOf(String str, int fromIndex) 描述:傳回指定子字元串最後一次出現的字元串中的索引。 */ // 獲得從指定的索引開始向前數,找到倒數第一次出現的字元串出現的索引 int lastIndex1 = sb.lastIndexOf("n", 5); System.out.println(lastIndex1); } }