由于字符串是常量,因此一旦创建,其内容和长度是不可改变的。如果需要对一个字符串进行修改,则只能创建新的字符串。
为了便于对字符串的修改,JDK中提供了一个StringBuffer类(也称字符缓冲区)。
StringBuffer类和String类最大的区别在于它的内容和长度都是可以改变的。
StringBuffer类似一个字符容器,当在其中添加或删除字符时,并不会产生新的StringBuffer对象。
针对添加和删除字符的操作,StringBuffer类提供了些的方法,具体如下:
方法声明 | 功能描述 |
StringBuffer append(char c) | 添加参数到StringBuffer对象中 |
StringBuffer insert(int offset,String str) | 将字符串中的offset位置插入字符串str |
StringBuffer deleteCharAt(int index) | 移除此序列指定位置的字符 |
StringBuffer delete(int start,int end) | 删除StringBuffer对象中指定范围的字符或字符串序 |
StringBuffer replace(int start,intend,String s) | 在StringBuffer对象中替换指定的字符或字符串序列 |
void setCharAt(int index,char ch) | 修改指定位置index处的字符序列 |
String toString() | 返回StringBuffer缓冲区中的字符串 |
StringBuffer reverse() | 将此字符序列用其反转形式取代 |
涉及到StringBuffer类的很多方法,其中append()和insert()方法是最常用的,并且这两个方法有很多重载形式,它们都用于添加字符。
不同的是append()方法始终将这些字符添加到缓冲区的末尾,而insert()方法则可以在指定的位置添加字符。
delete()方法用于删除指定位置的字符
setCharAt(0和replace()方法用于替换指定位置的字符
下边一个例子运用了StringBuffer类的一些常用方法:
public class Example {
public static void main(String[] args) {
System.out.println("-----------添加----------");
add();
System.out.println("-----------删除----------");
remove();
System.out.println("-----------修改----------");
alter();
}
public static void add(){
//定义一个字符串缓冲区
StringBuffer sb = new StringBuffer();
sb.append("abcde"); //在末尾添加字符串
System.out.println("append添加结果:"+sb);
//在指定位置添加字符串
//从 0 开始下标为 2 的位置 插入 "123"
sb.insert(2, "123");
System.out.println("insert添加结果:"+sb);
}
public static void remove(){
StringBuffer sb = new StringBuffer("abcde");
System.out.println("sb的初值:"+sb);
//在指定范围内删除字符串
//从 0 开始下标为1到3 的范围内的字符删除,不包括下标为 3 处的字符
sb.delete(1, 3);
System.out.println("删除指定位置结果:"+sb);
//在指定位置删除字符串 此时是针对最新 sb 结果操作
sb.deleteCharAt(2);
System.out.println("删除指定位置结果:"+sb);
//清空缓冲区 利用字符缓冲区的长度
sb.delete(0, sb.length());
System.out.println("清空缓冲区结果:"+sb);
}
public static void alter(){
StringBuffer sb = new StringBuffer("abcde");
System.out.println("sb的初值:"+sb);
//修改指定位置字符
sb.setCharAt(1, 'p');
System.out.println("修改指定位置字符结果:"+sb);
//替换指定位置范围内的字符或者字符串,不包括下标为 3 处的字符
sb.replace(1, 3, "qq");
System.out.println("替换指定位置字符(串)结果:"+sb);
System.out.println("字符串翻转结果:"+sb.reverse());
}
}
运行结果:
从运行结果可以看出来,在使用delete()方法时候,当删除指定范围内的字符时,
比如原是字符串是“abcde” ,当使用delete(1,3)方法时候,字符串将从"abcde" 变成 "ade" 。
从下标0开始数的话 :
a | b | c | d | e |
0 | 1 | 2 | 3 | 4 |
delete(1,3)方法将删除下标为1、2处的字符,不包括下标为3 的字符。
同理,当使用replace()方法替换指定范围内的字符时候,比如原是字符串是“apcde” ,
当使用replace(1,3)方法时候,字符串将从"apcde" 变成 "aqqde" 。
即将 下标为 1、2、范围内的字符内容用 "qq" 替换了。
由此看出 replace( )方法也不会包括最后一位下标处字符。