您的位置:首页 > 产品设计 > UI/UE

StringBuffer,and,StringBuilder

2016-08-23 17:39 120 查看
/*
StringBuffer是字符串缓冲区。

是一个容器。
特点:
1.长度是可变化的。
2.可以对内容通过制定方法进行修改
3.容器对象一般都会具备对容器中的元素进行操作的功能。增删改查。
4.缓冲区可以存储不同类型的数据。
5.最终缓冲区存储完的数据都会通过toString方法变成字符串。

起一个临时存储的作用

C create U update R read D delete

1,存储。
StringBuffer append():将指定数据作为参数添加到已有数据结尾处。
StringBuffer insert(index,数据):可以将数据插入到指定index位置。

2,删除。
StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。
StringBuffer deleteCharAt(index):删除指定位置的字符。

3,获取。
char charAt(int index)
int indexOf(String str)
int lastIndexOf(String str)
int length()
String substring(int start, int end)

4,修改。
StringBuffer replace(start,end,string);
void setCharAt(int index, char ch) ;

5,反转。
StringBuffer reverse();

6,
将缓冲区中指定数据存储到指定字符数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

7,设置字符序列的长度。
setLength()

JDK1.5 版本之后出现了StringBuilder.

StringBuffer是线程同步。
StringBuilder是线程不同步。

以后开发,建议使用StringBuilder

升级三个因素:
1,提高效率。
2,简化书写。
3,提高安全性。

*/


原理:

字符串缓冲区中维护了一个“可变长度的数组”
解释:其实就是超出内部数组长度后,新建数组长度是原数组的1.5,1.75,1.x等的倍数,并将原数组的数据复制到新数组中,并将新的元素也添加到新数组中

什么时候用字符串缓冲区呢?

数据很多,个数无法确定,类型无法确定,只要最后都转换成字符串

就是用StringBuffer这个容器。

使用的局限性:

1.必须最终转换成字符串

2.无法对存储进来的元素进行单独操作,因为存储进来的元素都变成字符串

class Demo
{
}

class StringBufferDemo
{
public static void main(String[] args)
{
//method_update();

StringBuilder sb = new StringBuilder("abcdef");

char[] chs = new char[6];

sb.getChars(1,4,chs,1);//将

for(int x=0; x<chs.length; x++)
{
sop("chs["+x+"]="+chs[x]+";");
}

draw(3,6);
draw(8,9);

// StringBuilder sb1 = new StringBuilder();
// sb1.append(new Demo()).append(new Demo());
// sop("sb1="+sb1);
}
public static void method_update()
{
StringBuffer sb = new StringBuffer("abcde");

// sb.replace(1,4,"java");
sb.setCharAt(2,'k');

sop(sb.toString());

}
public static void method_del()
{
StringBuffer sb = new StringBuffer("abcde");

// sb.delete(1,3);
//清空缓冲区。
//sb.delete(0,sb.length());

//sb.delete(2,3);
sb.deleteCharAt(2);

sop(sb.toString());
}

public static void method_add()
{
StringBuffer sb = new StringBuffer();

//sb.append("abc").append(true).append(34);
// StringBuffer sb1 = sb.append(34);
// sop("sb==sb1:"+(sb==sb1));

sb.insert(1,"qq");
sop(sb.toString());//abctrue34
//sop(sb1.toString());

}

public static void sop(String str)
{
System.out.println(str);
}

public static void draw(int row,int col)
{
StringBuilder sb = new StringBuilder();
for(int x=0; x<row; x++)
{
for(int y=0; y<col; y++)
{
sb.append("*");
}
sb.append("\r\n");
}

sop(sb.toString());
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: