StringBuffer与StringBuilder:
StringBuffer 系统提供的一个类
StringBuffer:线程安全(耗费资源)的可变字符序列。StringBuilder(java1.5后出的):线程不安全(不耗费资源)的可变字符序列
public static void main(String[] args)
{
// fun1();
// fun2();
// insert();
// delete();
// replace();
// reverse();
// reverse("fanjunnan");
fun1();
}
public static void fun1()
{
//初始化stringBuff
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = new StringBuffer("fanjunnan");
//打印当前的容量(理论值),传入字符串后,系统并没有使用原来分配的16字符空间,而是另分配了空间
System.out.println(sb.capacity());
System.out.println(sb1.capacity());
//打印一下底层数组的长度(实际值)
System.out.println(sb.length());
System.out.println(sb1.length());
//打印内容
System.out.println(sb);
System.out.println(sb1.toString());
//添加
sb1 = sb1.append("hehe");
System.out.println(sb1);
}
public static void fun2()
{
//添加,可以添加多种类型的数据
StringBuffer sb = new StringBuffer();
StringBuffer sb1 = sb.append("fanjunnan");
System.out.println(sb1);
StringBuffer sb2 = sb1.append("HKD");
StringBuffer sb3 = sb2.append("xiaoFan");
//打印出来的结果都一样,说明几个变量都是指向的是同一个地址
//两次sb1的输出结果不一样,说明StringBuff长度是可变的,对StringBuff操作的时候改变的是他的本身
System.out.println(sb);
System.out.println(sb1);
System.out.println(sb2);
System.out.println(sb3);
sb.append("fan").append("jun").append("nan");//调用链
System.out.println(sb);
}
//在stringBuff中插入字符或者字符串
public static void insert()
{
StringBuffer sb1 = new StringBuffer();
// sb1.setLength(10);//设置stringBuff的长度,一般不会设置,打印的时候不会打印出来,但是对字符串进行操作的时候,还会参加操作的
System.out.println(sb1);
StringBuffer sb2 = sb1.insert(0, "fanjunnan");
System.out.println(sb2);
StringBuffer sb3 = sb2.insert(2, "heheda");//把这个字符串插入到第二个角标
System.out.println(sb3);
sb3.insert(2, "efg");
System.out.println(sb3);
sb3.setCharAt(2, 'a');//把索引位置的字符替换掉
System.out.println(sb3);
sb3.insert(0, 6);//实际上内部是把int类型的转换成字符串类型然后用字符串插入
System.out.println(sb3);
}
//删除
public static void delete()
{
StringBuffer sb = new StringBuffer();
// sb.setLength(10);
sb.append("fanjunnan");
sb.insert(0,"hehe");
//删除一段长度的字符串,留头不留尾
System.out.println(sb);
System.out.println(sb.length());
sb.delete(10, 11);
//根据索引删除索引位置的字符
// sb.deleteCharAt(0);
System.out.println(sb.length());
System.out.println(sb);
}
//替换
public static void replace()
{
StringBuffer sb = new StringBuffer();
sb.append("fanjunnan");
//替换字符串
sb.replace(6, 11, "yong");
System.out.println(sb);
//替换字符
sb.setCharAt(0, 'F');
System.out.println(sb);
}
//反转
public static void reverse()
{
StringBuffer sb = new StringBuffer();
sb.append("fanjunnan");
sb.reverse();
System.out.println(sb);
}
//字符串的反转
public static void reverse(String string)
{
//string转stringBuff
StringBuffer sb = new StringBuffer(string);
sb.reverse();
String string2 = new String(sb);
System.out.println(string2);
}
public static void main(String[] args) {
//1.把int[] array = new int[]{1,2,3,4};输出[1,2,3,4],要求是用string和stringbuff
// int[] array = new int[] {1,2,3,4};
// fun1(array);
// fun2(array);
String string = "haha";
//虽然字符串是个对象类型,但是作为参数的时候,和基本数据类型一样,相当于是值的传递,改变不了string原来的地址
fun3(string);
System.out.println(string);
StringBuffer sb = new StringBuffer();
// StringBuffer是引用数据类型,作为参数相当于是地址的传递,在函数中修改的部分相当于在原对象上进行的操作
sb.append(string);
fun4(sb);
System.out.println(sb);
}
//stringBuff拼接
public static void fun1(int[] array)
{
StringBuffer sb = new StringBuffer();
sb.append('[');
for (int i = 0; i < array.length; i++)
{
if (i== array.length-1)
{
sb.append(array[i]);
sb.append(']');
}else
{
sb.append(array[i]);
sb.append(',');
}
}
System.out.println(sb);
}
//字符串拼接
public static void fun2(int[] array)
{
String string = "[";
for (int i = 0; i < array.length; i++)
{
if (i == array.length-1)
{
string = string+array[i];
}
else
{
string = string+array[i]+",";
}
}
string = string+']';
System.out.println(string);
StringBuffer sb =new StringBuffer(string);
System.out.println(sb);
}
/**
* 字符串和stringBuff当做参数的时候的表现
*
*/
public static void fun3(String string)
{
string = "fanjunnan";
}
public static void fun4(StringBuffer sb)
{
sb.append("fanjunnan");
}