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); } }