java常用类库
- 格式:doc
- 大小:2.74 MB
- 文档页数:76
java常用类库【学习心得】
【StringBuffer类】
StringBuffer类本身是带缓冲区的,也是操作字符串的。与String类不同的是:String类中的内容一旦声明则不可改变,改变的仅仅是内存地址的指向,而StringBuffer中的内容是可以改变的。
对于StringBuffer类而言,本身是一个操作类,不能像String那样直接赋值进行对象的实例化,必须通过构造方法(new)完成。
StringBuffer中采用append()方法进行字符串的连接,而String中使用“+”进行字符串的连接。
StringBuffer类中的常用方法:
public StringBuffer append(boolean b)——串尾追加。StringBuffer类中重载了很多append方法,包括int、float、String、char、Object等等。此外append()方法的返回值是StringBuffer所以可以连续使用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public class StringBufferDemo01 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
/* 向StringBuffer中添加内容 */
sb.append("http://");
sb.append("www.").append("imooc").append(".com");
sb.append("\n").append("添加数字:").append(123);
sb.append("\n添加字符:").append('Q');
sb.append("\n布尔值:").append(true);
System.out.println(sb);
}
} 运行结果:
添加数字:123
添加字符:Q
布尔值:true
StringBuffer中的内容可以通过引用传递的方式改变,而String中的内容不能通过引用传递进行改变。
至于为什么String中的内容不可改变,详见:java中的一些概念总结——java引用传递及其应用。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 public class StringBufferDemo02 {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer();
sb.append("http://");
changeStringBuffer(sb);
// StringBuffer中的内容已经被改变了
System.out.println(sb);
String str = "中国";
changeString(str);
System.out.println(str);
}
public static void changeStringBuffer(StringBuffer sb) { // 接收StringBuffer的引用
sb.append("www.").append("imooc").append(".com"); // 修改StringBuffer的内容
}
public static void changeString(String str) { // 通过引用传递的方式并没有改变字符串 str =
"China";
}
}
程序的运行结果:
中国
从以上结果可以看出StringBuffer中存储的内容改变了,而String中的内容并没有被改变。
public StringBuffer insert(int offset,boolean b)——在任意位置进行插入(offset的取值0~length)。同样该方法也被重载了很多次。
1
2
3
4
5
6
7
8 StringBuffer sb = new StringBuffer();
sb.append("中国");
sb.insert(1, "T"); //在1位置添加
System.out.println(sb);
/*在最后添加*/
sb.insert(sb.length(), " imooc");
System.out.println(sb);
运行结果:
T中国
T中国 imooc
public StringBuffer reverse()——字符串反转(逆序)
1
2
3
4 StringBuffer sb = new StringBuffer();
sb.append("中国");
sb.reverse(); 5
System.out.println(sb);
运行结果:
国中
public StringBuffer replace(int start, int end,String str)——使用给定 String 中的字符替换此序列的子字符串中的字符。start - 起始索引(包含)。end - 结束索引(不包含)。
1
2
3
4
StringBuffer sb = new StringBuffer();
sb.append("imooc");
sb.replace(1, 3, "中国");
System.out.println(sb);
运行结果:
i中国oc
public String substring(int start)——返回一个新的 String,它包含此字符序列当前所包含的字符子序列。该子字符串始于指定索引处的字符,一直到此字符串末尾。
1
2
3
4 StringBuffer sb = new StringBuffer();
sb.append("http://").append("www.").append("imooc").append(".com");
String str = sb.substring(7);
System.out.println(str);
运行结果:
public int indexOf(String str)——第一次出现的指定子字符串在该字符串中的索引。 1
2
3
4
5
6
7 StringBuffer sb = new StringBuffer();
sb.append("hello imooc.");
/*查找*/
if (sb.indexOf("hello")!=-1) {
System.out.println("找到hello");
}
运行结果:
找到hello
public StringBuffer delete(int start,int end)——移除此序列的子字符串中的字符。start - 起始索引(包含)。end - 结束索引(不包含)。如果 start 等于 end,则不发生任何更改。
1
2
3
4
5
6 StringBuffer sb = new StringBuffer();
sb.append("hello imooc.");
/*字符串截取*/
sb.delete(0, 6);
System.out.println(sb);
运行结果:
imooc.
凡是需要频繁修改字符串内容的时候都应该使用StringBuffer类。
1
2
3
4
5
6
7
8 public class StringBufferDemo {
public static void main(String[] args) {
String str = "hello";
for (int i = 0; i < 100; i++) {
str += i; // 不断修改String的内存引用,性能低
}
System.out.println(str);