StringBuilder/StringBuffer类

StringBuilder/StringBuffer类是可以替代String类的另一种处理字符串的解决方案。一般来说,只要使用字符串的地方,都可以使用StringBuilder/StringBuffer类。StringBuilder/StringBuffer类比String类更灵活。可以给StringBuilder或StringBuffer中添加或追加新的内容,但是String对象一旦创建,它的值就确定了。
除了StringBuffer中修改缓冲区的方法是同步的之外,StringBuilder类与StringBuffer类是很相似的。如果是多任务并发访问,就使用StringBuffer;而如果是单任务访问,使用StringBuilder会更有效。
StringBuilder类有3个构造方法和30多个用于管理生成器或修改生成器内字符串的方法。可以构造方法创建一个空的字符串或从一个字符串创建 一个字符串生成器。
这里写图片描述
修改StringBuilder中的字符串
可以使用如下方法在字符串生成器的末尾追加新内容,在字符串生成器的特定位置插入新的内容,还可以删除或替换字符串生成器中的字符:
这里写图片描述
StringBuilder类提供了几个重载方法,可以将boolean、char、char数组、double、float、int、long和String类型值追加到字符串生成器。例如,下面的代码将字符串和字符追加到stringBuilder,构成新的字符串“Welcome to java“。

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("Welcome");
stringBuilder.append(' ');
stringBuilder.append("to");
stringBuilder.append(' ');
stringBuilder.append("Java");

StringBuilder类也包括几个重载的方法,可以将boolean、char数组、double、float、int、long和String类型值插入到字符串生成器。考虑下面的代码:

stringBuilder.insert(11,"HTML and");

假设在应用insert方法之前,stringBuilder包含的字符换是“Welcome to Java”。上面的代码就在stringBuilder的地11个位置(就在J之前)插入“HTML and”。新的stringBuilder就变成”Welcome to HTML and Java”。
也可以使用两个delete方法将字符从生成器中的字符串中删除,使用reverse方法倒置字符串,使用replace方法替换字符串中的字符,或者使用setCharAt方法在字符串中设置一个新字符。
例如,假设在应用 下面的每个方法之前,stringBuilder包含的是“Welcome to Java”。
stringBuilder.delete(8,11)将生成器变为Welcome java。
stringBuilder.deleteCharAt(8)将生成器变为Welcome o Java。
stringBuilder.reverse()将生成器变为avaJ ot emocleW。
stringBuilder.replace(11,15,“HTML”)将生成器变为Welcome to HTML。
stringBuilder.setCharAt(0,‘w’)将生成器变为welcome to Java。
除了setCharAt方法之外,所有这些进行修改的方法都做两件事:
改变字符串生成器的内容。
返回字符串生成器的引用。
例如,下面的语句:
StringBuilder stringBuilder1 = stringBuilder.reverse();
将生成器中的字符倒置并把生成器的引用赋值给stringBuilder1。这样,stringBuilder和stringBuilder1都指向同一个StringBuffer对象。回顾一下,如果你对方法的返回值不感兴趣,所有带返回值类的方法都可以被当做语句调用。在这种情况下,Java就简单地忽略掉返回值。例如,下面的语句

stringBuilder.reverse();

它的返回值就被忽略了。
提示 如果一个字符串不需要任何改变,则使用String类而不适用StringBuffer类。Java可以完成对String类的优化,例如,共享限定字符串等。

toString、capacity、length、setLength和charAt方法
StringBuffer类提供了许多其他处理字符串生成器和获取它的属性的方法。
这里写图片描述
capacity()方法返回字符串生成器当前的容量。容量是指在不增加生成器大小的情况下,能够存储的字符数量。
length()方法返回字符串生成器中实际存储的字符数量。
setLength(new Length)方法设置字符串生成器的长度。
如果参数newLength小于字符串生成器的当前长度,则字符串生成器会被截短到恰好能包含由参数newLength给定的字符个数。如果参数newLength大于或等于当前长度,则给字符串生成器追加足够多的null字符(‘\u0000’),使其长度length变成新参数newLength。参数newLength必须大于等于0。
charAt(index)方法返回字符串生成器中下标为某个特定下标index的字符。下标是基于0的,字符串生成器中的第一个字符的下标为0,第二个字符的下标为1,依次类推。参数index必须大于或等于0,并且小于字符串生成器的长度。
注意 字符串的长度总是小于或等于生成器的容量。长度是存储在生成器中的字符串的实际大小,而容量是生成器的当前大小。如果有更多的字符添加到字符串生成器,超出他的容量,则生成器的容量就会自动增加。在计算机内部,字符串生成器是一个字符数组,因此,生成器的容量就是数组的大小。如果超出生成器的容量,就用新的数组替换现有数组。新数组的大小为2*(前一个数组的长度+1)。
提示:可以使用new StringBuilder(initialCapacity)创建指定初始容量的StringBuilder。仔细选择初始容量,能够使程序更有效。如果容量总是超过生成器的实际长度,JVM将永远不需要为生成器重新分配内存。另一方面,如果容量过大,将会浪费内存空间。可以使用trimToSize()方法将容量降到实际大小。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值