13.10.3 ensureCapacity( ) 如果想在构造StringBuffer之后为某些字符预分配空间,可以使用ensureCapacity( )方法设置缓冲区的大小。这在事先已知要在StringBuffer上追加大量小字符串的情况下是有用的。ensureCapacity( )方法具有如下的一般形式: void ensureCapacity(int capacity) 这里capacity指定了缓冲区的大小。 13.10.4 setLength( ) 使用setLength( )方法在StringBuffer对象内设置缓冲区的大小。其一般形式如下: void setLength(int len) 这里len指定了缓冲区的长度。这个值必须是非负的。当增加缓冲区的大小时,空字符将被加在现存缓冲区的后面。如果用一个小于length( )方法返回的当前值的值调用setLength( )方法,那么在新长度之后存储的字符将被丢失。后面的setCharAtDemo例子程序使用setLength( )方法缩短StringBuffer。 13.10.5 charAt( )和setCharAt( ) 使用charAt( )方法可以从StringBuffer中得到单个字符的值。可以通过setCharAt( )方法给StringBuffer中的字符置值。它们的一般形式如下: char charAt(int where) void setCharAt(int where, char ch) 对于charAt( )方法,where指定获得的字符的下标。对于setCharAt( )方法,where指定被置值的字符的下标,而ch指定了该字符的新值。对于这两种方法,where必须是非负的,同时不能指定在缓冲区之外的位置。 下面的例子说明了charAt( )和setCharAt( )方法: // Demonstrate charAt() and setCharAt(). class setCharAtDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("Hello"); System.out.println("buffer before = " + sb); System.out.println("charAt(1) before = " + sb.charAt(1)); sb.setCharAt(1, 'i'); sb.setLength(2); System.out.println("buffer after = " + sb); System.out.println("charAt(1) after = " + sb.charAt(1)); } } 下面是该程序的输出结果: buffer before = Hello charAt(1) before = e buffer after = Hi charAt(1) after = i 13.10.6 getChars( ) 使用getChars( )方法将StringBuffer的子字符串复制给数组。其一般形式如下: void getChars(int sourceStart, int sourceEnd, char target[ ], int targetStart) 这里,sourceStart指定子字符串开始时的下标,而sourceEnd指定了该子字符串结束时下一个字符的下标。这意味着子字符串包含了从sourceStart到sourceEnd–1位置上的字符。接收字符的数组由target指定。在target内将被复制子字符串的位置下标由targetStart传递。应注意确保target数组足够大以便能够保存指定的子字符串所包含的字符。 13.10.7 append( ) append( )方法将任一其他类型数据的字符串形式连接到调用StringBuffer对象的后面。对所有内置的类型和Object,它都有重载形式。下面是其几种形式: StringBuffer append(String str) StringBuffer append(int num) StringBuffer append(Object obj) 每个参数调用String.valueOf( )方法获得其字符串表达式。结果追加在当前StringBuffer对象后面。对每一种append( )形式,返回缓冲区本身。它允许后续的调用被连成一串,下面的例子说明了这一点: // Demonstrate append(). class appendDemo { public static void main(String args[]) { String s; int a = 42; StringBuffer sb = new StringBuffer(40); s = sb.append("a = ").append(a).append("!").toString(); System.out.println(s); } } 程序的输出如下所示: a = 42! 当对字符串(String)对象使用+运算符时,append( )方法是最常被调用的。Java自动地改变对字符串(String)实例的修改,就像对StringBuffer实例的操作一样。因此,连接调用StringBuffer对象的append( )方法。在执行连接之后,编译器插入对toString( )方法的调用,将修改的StringBuffer返回到一个不变的字符串(String)中。所有这一切看起来是很复杂的。为什么不是仅仅只有一个其操作或多或少地像StringBuffer的字符串类呢?答案是性能。Java运行时执行的许多优化是知道字符串(String)对象是不可改变的。值得欣慰的是Java隐藏了大多数复杂的String与StringBuffer之间的转换。实际上,大多数的程序员从没有直接感觉到需要使用StringBuffer,而可以根据应用于字符串(String)变量上的+运算符表示大多数的操作。 13.10.8 insert( ) insert( )方法将一个字符串插入另一个字符串中。它被重载而接收所有简单类型的值,包括String和Object。和append( )方法一样,它调用String.valueOf( )方法得到调用它的值的字符串表达式。随后这个字符串被插入所调用的StringBuffer对象中。下面是它们的几种形式: StringBuffer insert(int index, String str) StringBuffer insert(int index, char ch) StringBuffer insert(int index, Object obj) 这里index指定将字符串插入所调用的StringBuffer对象中的插入点的下标。 下面的例子程序完成在“I”和“Java”之间插入“like”的功能。 // Demonstrate insert(). class insertDemo { public static void main(String args[]) { StringBuffer sb = new StringBuffer("I Java!"); sb.insert(2, "like "); System.out.println(sb); } } 程序的输出结果如下所示: I like Java! 13.10.9 reverse( ) 可以使用reverse( )方法将StringBuffer对象内的字符串翻转,其一般形式如下: StringBuffer reverse( ) 这种方法返回被调用对象的翻转对象。下面的程序说明了reverse( )方法: // Using reverse() to reverse a StringBuffer. class ReverseDemo { public static void main(String args[]) { StringBuffer s = new StringBuffer("abcdef"); System.out.println(s); s.reverse(); System.out.println(s); } } 程序的输出结果如下所示: abcdef fedcba
<<上一页
1
2
3
4
5
6
7
8
9
10
11
12
下一页>>
|