StringBuffer 详解 (String系列之3)
来源:互联网 发布:java的函数式编程 编辑:程序博客网 时间:2024/06/04 20:28
StringBuffer 详解 (String系列之3)
本章介绍StringBuffer以及它的API的详细使用方法。
转载请注明出处:http://www.cnblogs.com/skywang12345/p/string03.html
StringBuffer 简介
StringBuffer 是一个线程安全的可变的字符序列。它继承于AbstractStringBuilder,实现了CharSequence接口。
StringBuilder 也是继承于AbstractStringBuilder的子类;但是,StringBuilder和StringBuffer不同,前者是非线程安全的,后者是线程安全的。
StringBuffer 和 CharSequence之间的关系图如下:
StringBuffer 函数列表
StringBuffer()StringBuffer(int capacity)StringBuffer(String string)StringBuffer(CharSequence cs)StringBuffer append(boolean b)StringBuffer append(int i)StringBuffer append(long l)StringBuffer append(float f)StringBuffer append(double d)synchronized StringBuffer append(char ch)synchronized StringBuffer append(char[] chars)synchronized StringBuffer append(char[] chars, int start, int length)synchronized StringBuffer append(Object obj)synchronized StringBuffer append(String string)synchronized StringBuffer append(StringBuffer sb)synchronized StringBuffer append(CharSequence s)synchronized StringBuffer append(CharSequence s, int start, int end)StringBuffer appendCodePoint(int codePoint)int capacity()synchronized char charAt(int index)synchronized int codePointAt(int index)synchronized int codePointBefore(int index)synchronized int codePointCount(int beginIndex, int endIndex)synchronized StringBuffer delete(int start, int end)synchronized StringBuffer deleteCharAt(int location)synchronized void ensureCapacity(int min)synchronized void getChars(int start, int end, char[] buffer, int idx)synchronized int indexOf(String subString, int start)int indexOf(String string)StringBuffer insert(int index, boolean b)StringBuffer insert(int index, int i)StringBuffer insert(int index, long l)StringBuffer insert(int index, float f)StringBuffer insert(int index, double d)synchronized StringBuffer insert(int index, char ch)synchronized StringBuffer insert(int index, char[] chars)synchronized StringBuffer insert(int index, char[] chars, int start, int length)synchronized StringBuffer insert(int index, String string)StringBuffer insert(int index, Object obj)synchronized StringBuffer insert(int index, CharSequence s)synchronized StringBuffer insert(int index, CharSequence s, int start, int end)int lastIndexOf(String string)synchronized int lastIndexOf(String subString, int start)int length()synchronized int offsetByCodePoints(int index, int codePointOffset)synchronized StringBuffer replace(int start, int end, String string)synchronized StringBuffer reverse()synchronized void setCharAt(int index, char ch)synchronized void setLength(int length)synchronized CharSequence subSequence(int start, int end)synchronized String substring(int start)synchronized String substring(int start, int end)synchronized String toString()synchronized void trimToSize()
StringBuffer源码(基于jdk1.7.40)
View Code
StringBuffer 示例
源码如下(StringBufferTest.java):
1 /** 2 * StringBuffer 演示程序 3 * 4 * @author skywang 5 */ 6 import java.util.HashMap; 7 8 public class StringBufferTest { 9 10 public static void main(String[] args) { 11 testInsertAPIs() ; 12 testAppendAPIs() ; 13 testReplaceAPIs() ; 14 testDeleteAPIs() ; 15 testIndexAPIs() ; 16 testOtherAPIs() ; 17 } 18 19 /** 20 * StringBuffer 的其它API示例 21 */ 22 private static void testOtherAPIs() { 23 24 System.out.println("-------------------------------- testOtherAPIs --------------------------------"); 25 26 StringBuffer sbuilder = new StringBuffer("0123456789"); 27 28 int cap = sbuilder.capacity(); 29 System.out.printf("cap=%d\n", cap); 30 31 char c = sbuilder.charAt(6); 32 System.out.printf("c=%c\n", c); 33 34 char[] carr = new char[4]; 35 sbuilder.getChars(3, 7, carr, 0); 36 for (int i=0; i<carr.length; i++) 37 System.out.printf("carr[%d]=%c ", i, carr[i]); 38 System.out.println(); 39 40 System.out.println(); 41 } 42 43 /** 44 * StringBuffer 中index相关API演示 45 */ 46 private static void testIndexAPIs() { 47 System.out.println("-------------------------------- testIndexAPIs --------------------------------"); 48 49 StringBuffer sbuilder = new StringBuffer("abcAbcABCabCaBcAbCaBCabc"); 50 System.out.printf("sbuilder=%s\n", sbuilder); 51 52 // 1. 从前往后,找出"bc"第一次出现的位置 53 System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\")", sbuilder.indexOf("bc")); 54 55 // 2. 从位置5开始,从前往后,找出"bc"第一次出现的位置 56 System.out.printf("%-30s = %d\n", "sbuilder.indexOf(\"bc\", 5)", sbuilder.indexOf("bc", 5)); 57 58 // 3. 从后往前,找出"bc"第一次出现的位置 59 System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\")", sbuilder.lastIndexOf("bc")); 60 61 // 4. 从位置4开始,从后往前,找出"bc"第一次出现的位置 62 System.out.printf("%-30s = %d\n", "sbuilder.lastIndexOf(\"bc\", 4)", sbuilder.lastIndexOf("bc", 4)); 63 64 System.out.println(); 65 } 66 67 /** 68 * StringBuffer 的replace()示例 69 */ 70 private static void testReplaceAPIs() { 71 72 System.out.println("-------------------------------- testReplaceAPIs ------------------------------"); 73 74 StringBuffer sbuilder; 75 76 sbuilder = new StringBuffer("0123456789"); 77 sbuilder.replace(0, 3, "ABCDE"); 78 System.out.printf("sbuilder=%s\n", sbuilder); 79 80 sbuilder = new StringBuffer("0123456789"); 81 sbuilder.reverse(); 82 System.out.printf("sbuilder=%s\n", sbuilder); 83 84 sbuilder = new StringBuffer("0123456789"); 85 sbuilder.setCharAt(0, 'M'); 86 System.out.printf("sbuilder=%s\n", sbuilder); 87 88 System.out.println(); 89 } 90 91 /** 92 * StringBuffer 的delete()示例 93 */ 94 private static void testDeleteAPIs() { 95 96 System.out.println("-------------------------------- testDeleteAPIs -------------------------------"); 97 98 StringBuffer sbuilder = new StringBuffer("0123456789"); 99 100 // 删除位置0的字符,剩余字符是“123456789”。101 sbuilder.deleteCharAt(0);102 // 删除位置3(包括)到位置6(不包括)之间的字符,剩余字符是“123789”。103 sbuilder.delete(3,6);104 105 // 获取sb中从位置1开始的字符串106 String str1 = sbuilder.substring(1);107 // 获取sb中从位置3(包括)到位置5(不包括)之间的字符串108 String str2 = sbuilder.substring(3, 5);109 // 获取sb中从位置3(包括)到位置5(不包括)之间的字符串,获取的对象是CharSequence对象,此处转型为String110 String str3 = (String)sbuilder.subSequence(3, 5);111 112 System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n", 113 sbuilder, str1, str2, str3);114 115 System.out.println();116 }117 118 /**119 * StringBuffer 的insert()示例120 */121 private static void testInsertAPIs() {122 123 System.out.println("-------------------------------- testInsertAPIs -------------------------------");124 125 StringBuffer sbuilder = new StringBuffer();126 127 // 在位置0处插入字符数组128 sbuilder.insert(0, new char[]{'a','b','c','d','e'});129 // 在位置0处插入字符数组。0表示字符数组起始位置,3表示长度130 sbuilder.insert(0, new char[]{'A','B','C','D','E'}, 0, 3);131 // 在位置0处插入float132 sbuilder.insert(0, 1.414f);133 // 在位置0处插入double134 sbuilder.insert(0, 3.14159d);135 // 在位置0处插入boolean136 sbuilder.insert(0, true);137 // 在位置0处插入char138 sbuilder.insert(0, '\n');139 // 在位置0处插入int140 sbuilder.insert(0, 100);141 // 在位置0处插入long142 sbuilder.insert(0, 12345L);143 // 在位置0处插入StringBuilder对象144 sbuilder.insert(0, new StringBuffer("StringBuilder"));145 // 在位置0处插入StringBuilder对象。6表示被在位置0处插入对象的起始位置(包括),13是结束位置(不包括)146 sbuilder.insert(0, new StringBuffer("STRINGBUILDER"), 6, 13);147 // 在位置0处插入StringBuffer对象。148 sbuilder.insert(0, new StringBuffer("StringBuffer"));149 // 在位置0处插入StringBuffer对象。6表示被在位置0处插入对象的起始位置(包括),12是结束位置(不包括)150 sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12);151 // 在位置0处插入String对象。152 sbuilder.insert(0, "String");153 // 在位置0处插入String对象。1表示被在位置0处插入对象的起始位置(包括),6是结束位置(不包括)154 sbuilder.insert(0, "0123456789", 1, 6);155 sbuilder.insert(0, '\n');156 157 // 在位置0处插入Object对象。此处以HashMap为例158 HashMap map = new HashMap();159 map.put("1", "one");160 map.put("2", "two");161 map.put("3", "three");162 sbuilder.insert(0, map);163 164 System.out.printf("%s\n\n", sbuilder);165 }166 167 /**168 * StringBuffer 的append()示例169 */170 private static void testAppendAPIs() {171 172 System.out.println("-------------------------------- testAppendAPIs -------------------------------");173 174 StringBuffer sbuilder = new StringBuffer();175 176 // 追加字符数组177 sbuilder.append(new char[]{'a','b','c','d','e'});178 // 追加字符数组。0表示字符数组起始位置,3表示长度179 sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3);180 // 追加float181 sbuilder.append(1.414f);182 // 追加double183 sbuilder.append(3.14159d);184 // 追加boolean185 sbuilder.append(true);186 // 追加char187 sbuilder.append('\n');188 // 追加int189 sbuilder.append(100);190 // 追加long191 sbuilder.append(12345L);192 // 追加StringBuilder对象193 sbuilder.append(new StringBuffer("StringBuilder"));194 // 追加StringBuilder对象。6表示被追加对象的起始位置(包括),13是结束位置(不包括)195 sbuilder.append(new StringBuffer("STRINGBUILDER"), 6, 13);196 // 追加StringBuffer对象。197 sbuilder.append(new StringBuffer("StringBuffer"));198 // 追加StringBuffer对象。6表示被追加对象的起始位置(包括),12是结束位置(不包括)199 sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12);200 // 追加String对象。201 sbuilder.append("String");202 // 追加String对象。1表示被追加对象的起始位置(包括),6是结束位置(不包括)203 sbuilder.append("0123456789", 1, 6);204 sbuilder.append('\n');205 206 // 追加Object对象。此处以HashMap为例207 HashMap map = new HashMap();208 map.put("1", "one");209 map.put("2", "two");210 map.put("3", "three");211 sbuilder.append(map);212 sbuilder.append('\n');213 214 // 追加unicode编码215 sbuilder.appendCodePoint(0x5b57); // 0x5b57是“字”的unicode编码216 sbuilder.appendCodePoint(0x7b26); // 0x7b26是“符”的unicode编码217 sbuilder.appendCodePoint(0x7f16); // 0x7f16是“编”的unicode编码218 sbuilder.appendCodePoint(0x7801); // 0x7801是“码”的unicode编码219 220 System.out.printf("%s\n\n", sbuilder);221 }222 }
运行结果:
-------------------------------- testInsertAPIs -------------------------------{3=three, 2=two, 1=one}12345StringBUFFERStringBufferBUILDERStringBuilder12345100true3.141591.414ABCabcde-------------------------------- testAppendAPIs -------------------------------abcdeABC1.4143.14159true10012345StringBuilderBUILDERStringBufferBUFFERString12345{3=three, 2=two, 1=one}字符编码-------------------------------- testReplaceAPIs ------------------------------sbuilder=ABCDE3456789sbuilder=9876543210sbuilder=M123456789-------------------------------- testDeleteAPIs -------------------------------sbuilder=123789str1=23789str2=78str3=78-------------------------------- testIndexAPIs --------------------------------sbuilder=abcAbcABCabCaBcAbCaBCabcsbuilder.indexOf("bc") = 1sbuilder.indexOf("bc", 5) = 22sbuilder.lastIndexOf("bc") = 22sbuilder.lastIndexOf("bc", 4) = 4-------------------------------- testOtherAPIs --------------------------------cap=26c=6carr[0]=3 carr[1]=4 carr[2]=5 carr[3]=6
0 0
- StringBuffer 详解 (String系列之3)
- StringBuffer 详解 (String系列之3)
- StringBuffer 详解 (String系列之3)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
- 恶补Java系列之String、StringBuffer、StringBuilder
- String and StringBuffer 详解
- String与StringBuffer详解
- String和StringBuffer详解
- String和StringBuffer详解
- String,StringBuffer,StringBuilder详解
- 小曹学spring--Spring的事务管理难点剖析
- StringBuilder 详解 (String系列之2)
- 开始报名啦!——第二届融360“天机”金融风控大数据竞赛火热来袭
- zsh bash 切换
- AOP切入点表达式解析
- StringBuffer 详解 (String系列之3)
- 杭电1228
- window下安装使用virtualenv
- PHPCMS推荐位调用自定义字段
- Glide
- Sql -- 练习4 某列部分数据排序(其他默认)
- AngularJS HTML DOM
- MapReduce任务运行到running job卡住
- Java集合中的线程安全问题