/*
StringBuffer :线程安全,可变的字符序列
理解成一个容器,只能存储字符串
存储:
StringBuffer append(boolean b)
StringBuffer insert(int offset, boolean b)
删除:
StringBuffer delete(int start, int end)
StringBuffer deleteCharAt(int index)
修改:
StringBuffer replace(int start, int end, String str)
void setCharAt(int index, char ch)
获取:
char charAt(int index)
int indexOf(String str)
int indexOf(String str, int fromIndex)
int lastIndexOf(String str)
返回最右边出现的指定子字符串在此字符串中的索引。
int lastIndexOf(String str, int fromIndex)
返回最后一次出现的指定子字符串在此字符串中的索引。
int length()
返回长度(字符数)。
反转:
StringBuffer reverse()
StringBuffer:jdk1.0就有,多线程安全的,执行效率低
StringBuilder:jdk1.5才有,线程不安全的,执行效率高
不需要考虑线程安全问题时使用StringBuilder
JDK升级的原因:
1:提高效率
2:提高安全性
3:简化书写
*/
class Demo4
{
public static void main(String[] args)
{
//cunChu();
juXing(5,10);
}
public static void cunChu(){
StringBuffer sb=new StringBuffer();
//StringBuffer sb2=sb.append("hello");
//StringBuffer sb3=sb.append(66);
//sop(sb==sb3);
sb.append("hello").append(66).append(true); //append方法按顺序添加字符串
sb.append(new Object());//把对象的字符串表示存储 类名@哈希值
sb.insert(7,"lisi");//insert可以指定字符串添加的位置
sb.delete(7,11);//包括起始位置,不包括结束位置,到结束位置的前一位
sb.deleteCharAt(4);
sb.replace(6,10,"false");
sb.setCharAt(4,'9');
sb.reverse();
sop(sb.toString());//.toString()可以不写默认调用的就是toString()方法(类名加哈希值但是StringBuffer类改写了toString()方法)
}
//打印一个矩形,*
public static void juXing(int rows,int cols){
StringBuilder sb = new StringBuilder();
for(int i=1;i<=rows;i++){
for(int j=1;j<=cols;j++)
sb.append("*");
sb.append("\r\n");
}
sop(sb.toString());
}
public static void sop(Object obj){
System.out.println(obj);
}
}