Java StringBuffer常见方法

StringBuffer是可变长的字符串

示例 1 : 追加 删除 插入 反转

append追加

delete 删除

insert 插入

reverse 反转

package character;

public class TestString {

    public static void main(String[] args) {
String str1 = "let there "; StringBuffer sb = new StringBuffer(str1); //根据str1创建一个StringBuffer对象
sb.append("be light"); //在最后追加 System.out.println(sb); sb.delete(4, 10);//删除4-10之间的字符 System.out.println(sb); sb.insert(4, "there ");//在4这个位置插入 there System.out.println(sb); sb.reverse(); //反转 System.out.println(sb); } }

示例 2 : 长度 容量

为什么StringBuffer可以变长?

和String内部是一个字符数组一样,StringBuffer也维护了一个字符数组。 但是,这个字符数组,留有冗余长度

比如说new StringBuffer("the"),其内部的字符数组的长度,是19,而不是3,这样调用插入和追加,在现成的数组的基础上就可以完成了。

如果追加的长度超过了19,就会分配一个新的数组,长度比原来多一些,把原来的数据复制到新的数组中,看上去 数组长度就变长了

length: “the”的长度 3

capacity: 分配的总空间 19

注: 19这个数量,不同的JDK数量是不一样的

package character;

public class TestString {

    public static void main(String[] args) {
String str1 = "the"; StringBuffer sb = new StringBuffer(str1); System.out.println(sb.length()); //内容长度 System.out.println(sb.capacity());//总空间 } }

练习StringBuffer性能

生成10位长度的随机字符串

然后,先使用String的+,连接10000个随机字符串,计算消耗的时间

然后,再使用StringBuffer连接10000个随机字符串,计算消耗的时间

提示: 使用System.currentTimeMillis() 获取当前时间(毫秒)

答案

package character;

public class TestString {

    public static void main(String[] args) {
int total = 10000;
String s = randomString(10);
StringBuffer sb = new StringBuffer(); String str1 = "";
long start = System.currentTimeMillis(); for (int i = 0; i <total; i++) {
str1+=s;
}
long end = System.currentTimeMillis();
System.out.printf("使用字符串连接+的方式,连接%d次,耗时%d毫秒%n",total,end-start);
total *=100;
start = System.currentTimeMillis();
for (int i = 0; i <total; i++) {
sb.append(s);
}
end = System.currentTimeMillis();
System.out.printf("使用StringBuffer的方式,连接%d次,耗时%d毫秒%n",total,end-start); } private static String randomString(int length) {
String pool = "";
for (short i = '0'; i <= '9'; i++) {
pool += (char) i;
}
for (short i = 'a'; i <= 'z'; i++) {
pool += (char) i;
}
for (short i = 'A'; i <= 'Z'; i++) {
pool += (char) i;
}
char cs[] = new char[length];
for (int i = 0; i < cs.length; i++) {
int index = (int) (Math.random() * pool.length());
cs[i] = pool.charAt(index);
}
String result = new String(cs);
return result;
} }

最新文章

  1. Asp.Net 自定义储存Session方式
  2. Asp.Net_Mvc_获取当前Url、Controller、Action
  3. 开博客这么久以来,第一篇技术文章,python与c的接口对接
  4. thinkphp 添加 修改删除
  5. sql server 小记——分区表(上)
  6. C#中的Where和Lambda表达式
  7. list和set的区别
  8. (转)Ilist 和list的区别归纳总结
  9. access_token的获取方式
  10. BZOJ 2780: [Spoj]8093 Sevenk Love Oimaster( 后缀数组 + 二分 + RMQ + 树状数组 )
  11. 自动添加注释—VS2010宏的使用
  12. 测试DOM0级事件和DOM2级事件的堆叠
  13. (三)Lua脚本语言入门
  14. zTree实现地市县三级级联DAO接口
  15. 学习excel的使用技巧统计文本出现的次数
  16. Python机器学习笔记 使用sklearn做特征工程和数据挖掘
  17. BZOJ1856 [Scoi2010]字符串 数论
  18. 基于RBAC权限验证, 中间价middleware实现, views 登录视图代码
  19. 鸟哥的Linux私房菜——第十七章:Linux 账号与身份管理
  20. Eclipse默认快捷键指南

热门文章

  1. django中运行定时任务脚本
  2. Rxjava学习笔记
  3. qr.h
  4. windows下apache + mod_wsgi + python部署flask接口服务
  5. JavaScript之保留两位小数
  6. Java的静态变量初始化的坑
  7. 掌握Visual Studio断点
  8. 分布式环境配置虚拟域名,phpstudy配置虚拟域名,集成环境配置域名,域名禁止访问forbidden怎么解决
  9. three.js 设置透明度
  10. PATA1062 Talent and Virtue