程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中StringBuilder字符串類型的操作辦法及API整頓

Java中StringBuilder字符串類型的操作辦法及API整頓

編輯:關於JAVA

Java中StringBuilder字符串類型的操作辦法及API整頓。本站提示廣大學習愛好者:(Java中StringBuilder字符串類型的操作辦法及API整頓)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中StringBuilder字符串類型的操作辦法及API整頓正文


0.StringBuilder類型簡介
StringBuilder類型是一個可變的字符串類型,StringBuilder類型的API與StringBuffer類型的API根本分歧,獨一的差別是StringBuilder的應用假定在單一線程中,換句話說,StringBuilder是線程不平安的。StringBuilder在實例化的時刻,平日也會默許設定一個容量年夜小,普通為字符串參數的長度+16。StringBuilder是繼續AbstractStringBuilder這個籠統類的,而這個籠統類的外部應用字符數組來完成的,數組可以停止靜態擴大。StringBuilder類供給的經常使用的辦法有append()、insert()、replace()、deleteCharAt()、indexOf()、reverse()、toString()等辦法,可以完成字符串的增刪改查等根本功效。

package date0812.demo1;

public class Test3 {

  public static void main(String[] args) {
    StringBuilder stringBuilder = new StringBuilder("Eclipse");
    //添加
    stringBuilder = stringBuilder.append(" software");
    //容量
    int C = stringBuilder.capacity();
    //翻轉
    stringBuilder= stringBuilder.reverse();
    System.out.println(C);
    System.out.println(stringBuilder);
  }
}


運轉成果:

23
erawtfos espilcE

1. StringBuilder的辦法
StringBuilder 是一個可變的字符序列。它繼續於AbstractStringBuilder,完成了CharSequence接口。
StringBuffer 也是繼續於AbstractStringBuilder的子類;然則,StringBuilder和StringBuffer分歧,前者長短線程平安的,後者是線程平安的。
StringBuilder 和 CharSequence之間的關系圖以下:

StringBuilder辦法列表:

StringBuilder()
StringBuilder(int capacity)
StringBuilder(CharSequence seq)
StringBuilder(String str)

StringBuilder   append(float f)
StringBuilder   append(double d)
StringBuilder   append(boolean b)
StringBuilder   append(int i)
StringBuilder   append(long l)
StringBuilder   append(char c)
StringBuilder   append(char[] chars)
StringBuilder   append(char[] str, int offset, int len)
StringBuilder   append(String str)
StringBuilder   append(Object obj)
StringBuilder   append(StringBuffer sb)
StringBuilder   append(CharSequence csq)
StringBuilder   append(CharSequence csq, int start, int end)
StringBuilder   appendCodePoint(int codePoint)
int   capacity()
char   charAt(int index)
int   codePointAt(int index)
int   codePointBefore(int index)
int   codePointCount(int start, int end)
StringBuilder   delete(int start, int end)
StringBuilder   deleteCharAt(int index)
void   ensureCapacity(int min)
void   getChars(int start, int end, char[] dst, int dstStart)
int   indexOf(String subString, int start)
int   indexOf(String string)
StringBuilder   insert(int offset, boolean b)
StringBuilder   insert(int offset, int i)
StringBuilder   insert(int offset, long l)
StringBuilder   insert(int offset, float f)
StringBuilder   insert(int offset, double d)
StringBuilder   insert(int offset, char c)
StringBuilder   insert(int offset, char[] ch)
StringBuilder   insert(int offset, char[] str, int strOffset, int strLen)
StringBuilder   insert(int offset, String str)
StringBuilder   insert(int offset, Object obj)
StringBuilder   insert(int offset, CharSequence s)
StringBuilder   insert(int offset, CharSequence s, int start, int end)
int   lastIndexOf(String string)
int   lastIndexOf(String subString, int start)
int   length()
int   offsetByCodePoints(int index, int codePointOffset)
StringBuilder   replace(int start, int end, String string)
StringBuilder   reverse()
void   setCharAt(int index, char ch)
void   setLength(int length)
CharSequence   subSequence(int start, int end)
String   substring(int start)
String   substring(int start, int end)
String   toString()
void   trimToSize()

因為AbstractStringBuilder和StringBuilder源碼太長,這裡就不列出源碼了。感興致的讀者可以自行研討。

2. StringBuilder的API測試代碼
2.1 StringBuilder 中拔出(insert)相干的API
源碼以下(StringBuilderInsertTest.java):

/**
 * StringBuilder 的insert()示例
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderInsertTest {

  public static void main(String[] args) {
    testInsertAPIs() ;
  }

  /**
   * StringBuilder 的insert()示例
   */
  private static void testInsertAPIs() {

    System.out.println("-------------------------------- testInsertAPIs -------------------------------");

    StringBuilder sbuilder = new StringBuilder();

    // 在地位0處拔出字符數組
    sbuilder.insert(0, new char[]{'a','b','c','d','e'});
    // 在地位0處拔出字符數組。0表現字符數組肇端地位,3表現長度
    sbuilder.insert(0, new char[]{'A','B','C','D','E'}, 0, 3);
    // 在地位0處拔出float
    sbuilder.insert(0, 1.414f);
    // 在地位0處拔出double
    sbuilder.insert(0, 3.14159d);
    // 在地位0處拔出boolean
    sbuilder.insert(0, true);
    // 在地位0處拔出char
    sbuilder.insert(0, '\n');
    // 在地位0處拔出int
    sbuilder.insert(0, 100);
    // 在地位0處拔出long
    sbuilder.insert(0, 12345L);
    // 在地位0處拔出StringBuilder對象
    sbuilder.insert(0, new StringBuilder("StringBuilder"));
    // 在地位0處拔出StringBuilder對象。6表現被在地位0處拔出對象的肇端地位(包含),13是停止地位(不包含)
    sbuilder.insert(0, new StringBuilder("STRINGBUILDER"), 6, 13);
    // 在地位0處拔出StringBuffer對象。
    sbuilder.insert(0, new StringBuffer("StringBuffer"));
    // 在地位0處拔出StringBuffer對象。6表現被在地位0處拔出對象的肇端地位(包含),12是停止地位(不包含)
    sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12);
    // 在地位0處拔出String對象。
    sbuilder.insert(0, "String");
    // 在地位0處拔出String對象。1表現被在地位0處拔出對象的肇端地位(包含),6是停止地位(不包含)
    sbuilder.insert(0, "0123456789", 1, 6);
    sbuilder.insert(0, '\n');

    // 在地位0處拔出Object對象。此處以HashMap為例
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.insert(0, map);

    System.out.printf("%s\n\n", sbuilder);
  }
}

運轉成果:

-------------------------------- testInsertAPIs -------------------------------
{3=three, 2=two, 1=one}
12345StringBUFFERStringBufferBUILDERStringBuilder12345100
true3.141591.414ABCabcde

2.2 StringBuilder 中追加(append)相干的API
源碼以下(StringBuilderAppendTest.java):

/**
 * StringBuilder 的append()示例
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderAppendTest {

  public static void main(String[] args) {
    testAppendAPIs() ;
  }

  /**
   * StringBuilder 的append()示例
   */
  private static void testAppendAPIs() {

    System.out.println("-------------------------------- testAppendAPIs -------------------------------");

    StringBuilder sbuilder = new StringBuilder();

    // 追加字符數組
    sbuilder.append(new char[]{'a','b','c','d','e'});
    // 追加字符數組。0表現字符數組肇端地位,3表現長度
    sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3);
    // 追加float
    sbuilder.append(1.414f);
    // 追加double
    sbuilder.append(3.14159d);
    // 追加boolean
    sbuilder.append(true);
    // 追加char
    sbuilder.append('\n');
    // 追加int
    sbuilder.append(100);
    // 追加long
    sbuilder.append(12345L);
    // 追加StringBuilder對象
    sbuilder.append(new StringBuilder("StringBuilder"));
    // 追加StringBuilder對象。6表現被追加對象的肇端地位(包含),13是停止地位(不包含)
    sbuilder.append(new StringBuilder("STRINGBUILDER"), 6, 13);
    // 追加StringBuffer對象。
    sbuilder.append(new StringBuffer("StringBuffer"));
    // 追加StringBuffer對象。6表現被追加對象的肇端地位(包含),12是停止地位(不包含)
    sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12);
    // 追加String對象。
    sbuilder.append("String");
    // 追加String對象。1表現被追加對象的肇端地位(包含),6是停止地位(不包含)
    sbuilder.append("0123456789", 1, 6);
    sbuilder.append('\n');

    // 追加Object對象。此處以HashMap為例
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.append(map);
    sbuilder.append('\n');

    // 追加unicode編碼
    sbuilder.appendCodePoint(0x5b57);  // 0x5b57是“字”的unicode編碼
    sbuilder.appendCodePoint(0x7b26);  // 0x7b26是“符”的unicode編碼
    sbuilder.appendCodePoint(0x7f16);  // 0x7f16是“編”的unicode編碼
    sbuilder.appendCodePoint(0x7801);  // 0x7801是“碼”的unicode編碼

    System.out.printf("%s\n\n", sbuilder);
  }
}

運轉成果:

-------------------------------- testAppendAPIs -------------------------------
abcdeABC1.4143.14159true
10012345StringBuilderBUILDERStringBufferBUFFERString12345
{3=three, 2=two, 1=one}
字符編碼

2.3 StringBuilder 中調換(replace)相干的API
源碼以下(StringBuilderWordStrTest.java):

/**
 * StringBuilder 的replace()示例
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderWordStrTest {

  public static void main(String[] args) {
    testWordStrAPIs() ;
  }

  /**
   * StringBuilder 的replace()示例
   */
  private static void testWordStrAPIs() {

    System.out.println("-------------------------------- testWordStrAPIs ------------------------------");

    StringBuilder sbuilder;

    sbuilder = new StringBuilder("0123456789");
    sbuilder.replace(0, 3, "ABCDE");
    System.out.printf("sbuilder=%s\n", sbuilder);

    sbuilder = new StringBuilder("0123456789");
    sbuilder.reverse();
    System.out.printf("sbuilder=%s\n", sbuilder);

    sbuilder = new StringBuilder("0123456789");
    sbuilder.setCharAt(0, 'M');
    System.out.printf("sbuilder=%s\n", sbuilder);

    System.out.println();
  }
}

運轉成果:

-------------------------------- testWordStrAPIs ------------------------------
sbuilder=ABCDE3456789
sbuilder=9876543210
sbuilder=M123456789

2.4 StringBuilder 中刪除(delete)相干的API
源碼以下(StringBuilderDeleteTest.java):

/**
 * StringBuilder 的delete()示例
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderDeleteTest {

  public static void main(String[] args) {
    testDeleteAPIs() ;
  }

  /**
   * StringBuilder 的delete()示例
   */
  private static void testDeleteAPIs() {

    System.out.println("-------------------------------- testDeleteAPIs -------------------------------");

    StringBuilder sbuilder = new StringBuilder("0123456789");

    // 刪除地位0的字符,殘剩字符是“123456789”。
    sbuilder.deleteCharAt(0);
    // 刪除地位3(包含)到地位6(不包含)之間的字符,殘剩字符是“123789”。
    sbuilder.delete(3,6);

    // 獲得sb中從地位1開端的字符串
    String str1 = sbuilder.substring(1);
    // 獲得sb中從地位3(包含)到地位5(不包含)之間的字符串
    String str2 = sbuilder.substring(3, 5);
    // 獲得sb中從地位3(包含)到地位5(不包含)之間的字符串,獲得的對象是CharSequence對象,此處轉型為String
    String str3 = (String)sbuilder.subSequence(3, 5);

    System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n", 
        sbuilder, str1, str2, str3);
  }
}

運轉成果:

-------------------------------- testDeleteAPIs -------------------------------
sbuilder=123789
str1=23789
str2=78
str3=78

2.5 StringBuilder 中index相干的API
源碼以下(StringBuilderIndexTest.java):

/**
 * StringBuilder 中index相干API演示
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderIndexTest {

  public static void main(String[] args) {
    testIndexAPIs() ;
  }

  /**
   * StringBuilder 中index相干API演示
   */
  private static void testIndexAPIs() {
    System.out.println("-------------------------------- testIndexAPIs --------------------------------");

    StringBuilder sbuilder = new StringBuilder("abcAbcABCabCaBcAbCaBCabc");
    System.out.printf("sbuilder=%s\n", sbuilder);

    // 1. 早年往後,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\")", sbuilder.indexOf("bc"));

    // 2. 從地位5開端,早年往後,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\", 5)", sbuilder.indexOf("bc", 5));

    // 3. 從後往前,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\")", sbuilder.lastIndexOf("bc"));

    // 4. 從地位4開端,從後往前,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\", 4)", sbuilder.lastIndexOf("bc", 4));

    System.out.println();
  }
}

運轉成果:

-------------------------------- testIndexAPIs --------------------------------
sbuilder=abcAbcABCabCaBcAbCaBCabc
sbuilder.indexOf("bc")     = 1
sbuilder.indexOf("bc", 5)   = 22
sbuilder.lastIndexOf("bc")   = 22
sbuilder.lastIndexOf("bc", 4) = 4

2.6 StringBuilder 殘剩的API
源碼以下(StringBuilderOtherTest.java):

/**
 * StringBuilder 的其它API示例
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderOtherTest {

  public static void main(String[] args) {
    testOtherAPIs() ;
  }

  /**
   * StringBuilder 的其它API示例
   */
  private static void testOtherAPIs() {

    System.out.println("-------------------------------- testOtherAPIs --------------------------------");

    StringBuilder sbuilder = new StringBuilder("0123456789");

    int cap = sbuilder.capacity();
    System.out.printf("cap=%d\n", cap);

    char c = sbuilder.charAt(6);
    System.out.printf("c=%c\n", c);

    char[] carr = new char[4];
    sbuilder.getChars(3, 7, carr, 0);
    for (int i=0; i<carr.length; i++)
      System.out.printf("carr[%d]=%c ", i, carr[i]);
    System.out.println();

    System.out.println();
  }
}

運轉成果:

-------------------------------- testOtherAPIs --------------------------------
cap=26
c=6
carr[0]=3 carr[1]=4 carr[2]=5 carr[3]=6 

3. StringBuilder 完全示例
上面的示例是整合下面的幾個示例的完全的StringBuilder演示法式,源碼以下(StringBuilderTest.java):

/**
 * StringBuilder 演示法式
 *
 * @author skywang
 */
import java.util.HashMap;

public class StringBuilderTest {

  public static void main(String[] args) {
    testOtherAPIs() ;
    testIndexAPIs() ;
    testInsertAPIs() ;
    testAppendAPIs() ;
    testWordStrAPIs() ;
    testDeleteAPIs() ;
  }

  /**
   * StringBuilder 的其它API示例
   */
  private static void testOtherAPIs() {

    System.out.println("-------------------------------- testOtherAPIs --------------------------------");

    StringBuilder sbuilder = new StringBuilder("0123456789");

    int cap = sbuilder.capacity();
    System.out.printf("cap=%d\n", cap);

    char c = sbuilder.charAt(6);
    System.out.printf("c=%c\n", c);

    char[] carr = new char[4];
    sbuilder.getChars(3, 7, carr, 0);
    for (int i=0; i<carr.length; i++)
      System.out.printf("carr[%d]=%c ", i, carr[i]);
    System.out.println();

    System.out.println();
  }

  /**
   * StringBuilder 中index相干API演示
   */
  private static void testIndexAPIs() {
    System.out.println("-------------------------------- testIndexAPIs --------------------------------");

    StringBuilder sbuilder = new StringBuilder("abcAbcABCabCaBcAbCaBCabc");
    System.out.printf("sbuilder=%s\n", sbuilder);

    // 1. 早年往後,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\")", sbuilder.indexOf("bc"));

    // 2. 從地位5開端,早年往後,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\", 5)", sbuilder.indexOf("bc", 5));

    // 3. 從後往前,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\")", sbuilder.lastIndexOf("bc"));

    // 4. 從地位4開端,從後往前,找出"bc"第一次湧現的地位
    System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\", 4)", sbuilder.lastIndexOf("bc", 4));

    System.out.println();
  }

  /**
   * StringBuilder 的replace()示例
   */
  private static void testWordStrAPIs() {

    System.out.println("-------------------------------- testWordStrAPIs ------------------------------");

    StringBuilder sbuilder;

    sbuilder = new StringBuilder("0123456789");
    sbuilder.replace(0, 3, "ABCDE");
    System.out.printf("sbuilder=%s\n", sbuilder);

    sbuilder = new StringBuilder("0123456789");
    sbuilder.reverse();
    System.out.printf("sbuilder=%s\n", sbuilder);

    sbuilder = new StringBuilder("0123456789");
    sbuilder.setCharAt(0, 'M');
    System.out.printf("sbuilder=%s\n", sbuilder);

    System.out.println();
  }

  /**
   * StringBuilder 的delete()示例
   */
  private static void testDeleteAPIs() {

    System.out.println("-------------------------------- testDeleteAPIs -------------------------------");

    StringBuilder sbuilder = new StringBuilder("0123456789");

    // 刪除地位0的字符,殘剩字符是“123456789”。
    sbuilder.deleteCharAt(0);
    // 刪除地位3(包含)到地位6(不包含)之間的字符,殘剩字符是“123789”。
    sbuilder.delete(3,6);

    // 獲得sb中從地位1開端的字符串
    String str1 = sbuilder.substring(1);
    // 獲得sb中從地位3(包含)到地位5(不包含)之間的字符串
    String str2 = sbuilder.substring(3, 5);
    // 獲得sb中從地位3(包含)到地位5(不包含)之間的字符串,獲得的對象是CharSequence對象,此處轉型為String
    String str3 = (String)sbuilder.subSequence(3, 5);

    System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n", 
        sbuilder, str1, str2, str3);
  }

  /**
   * StringBuilder 的insert()示例
   */
  private static void testInsertAPIs() {

    System.out.println("-------------------------------- testInsertAPIs -------------------------------");

    StringBuilder sbuilder = new StringBuilder();

    // 在地位0處拔出字符數組
    sbuilder.insert(0, new char[]{'a','b','c','d','e'});
    // 在地位0處拔出字符數組。0表現字符數組肇端地位,3表現長度
    sbuilder.insert(0, new char[]{'A','B','C','D','E'}, 0, 3);
    // 在地位0處拔出float
    sbuilder.insert(0, 1.414f);
    // 在地位0處拔出double
    sbuilder.insert(0, 3.14159d);
    // 在地位0處拔出boolean
    sbuilder.insert(0, true);
    // 在地位0處拔出char
    sbuilder.insert(0, '\n');
    // 在地位0處拔出int
    sbuilder.insert(0, 100);
    // 在地位0處拔出long
    sbuilder.insert(0, 12345L);
    // 在地位0處拔出StringBuilder對象
    sbuilder.insert(0, new StringBuilder("StringBuilder"));
    // 在地位0處拔出StringBuilder對象。6表現被在地位0處拔出對象的肇端地位(包含),13是停止地位(不包含)
    sbuilder.insert(0, new StringBuilder("STRINGBUILDER"), 6, 13);
    // 在地位0處拔出StringBuffer對象。
    sbuilder.insert(0, new StringBuffer("StringBuffer"));
    // 在地位0處拔出StringBuffer對象。6表現被在地位0處拔出對象的肇端地位(包含),12是停止地位(不包含)
    sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12);
    // 在地位0處拔出String對象。
    sbuilder.insert(0, "String");
    // 在地位0處拔出String對象。1表現被在地位0處拔出對象的肇端地位(包含),6是停止地位(不包含)
    sbuilder.insert(0, "0123456789", 1, 6);
    sbuilder.insert(0, '\n');

    // 在地位0處拔出Object對象。此處以HashMap為例
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.insert(0, map);

    System.out.printf("%s\n\n", sbuilder);
  }

  /**
   * StringBuilder 的append()示例
   */
  private static void testAppendAPIs() {

    System.out.println("-------------------------------- testAppendAPIs -------------------------------");

    StringBuilder sbuilder = new StringBuilder();

    // 追加字符數組
    sbuilder.append(new char[]{'a','b','c','d','e'});
    // 追加字符數組。0表現字符數組肇端地位,3表現長度
    sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3);
    // 追加float
    sbuilder.append(1.414f);
    // 追加double
    sbuilder.append(3.14159d);
    // 追加boolean
    sbuilder.append(true);
    // 追加char
    sbuilder.append('\n');
    // 追加int
    sbuilder.append(100);
    // 追加long
    sbuilder.append(12345L);
    // 追加StringBuilder對象
    sbuilder.append(new StringBuilder("StringBuilder"));
    // 追加StringBuilder對象。6表現被追加對象的肇端地位(包含),13是停止地位(不包含)
    sbuilder.append(new StringBuilder("STRINGBUILDER"), 6, 13);
    // 追加StringBuffer對象。
    sbuilder.append(new StringBuffer("StringBuffer"));
    // 追加StringBuffer對象。6表現被追加對象的肇端地位(包含),12是停止地位(不包含)
    sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12);
    // 追加String對象。
    sbuilder.append("String");
    // 追加String對象。1表現被追加對象的肇端地位(包含),6是停止地位(不包含)
    sbuilder.append("0123456789", 1, 6);
    sbuilder.append('\n');

    // 追加Object對象。此處以HashMap為例
    HashMap map = new HashMap();
    map.put("1", "one");
    map.put("2", "two");
    map.put("3", "three");
    sbuilder.append(map);
    sbuilder.append('\n');

    // 追加unicode編碼
    sbuilder.appendCodePoint(0x5b57);  // 0x5b57是“字”的unicode編碼
    sbuilder.appendCodePoint(0x7b26);  // 0x7b26是“符”的unicode編碼
    sbuilder.appendCodePoint(0x7f16);  // 0x7f16是“編”的unicode編碼
    sbuilder.appendCodePoint(0x7801);  // 0x7801是“碼”的unicode編碼

    System.out.printf("%s\n\n", sbuilder);
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved