String对象是不可改变的。每次使用 System.String类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用System.Text.StringBuilder类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder类可以提升性能。

  通过用一个重载的构造函数方法初始化变量,可以创建 StringBuilder类的新实例,正如以下示例中所阐释的那样。

StringBuilder MyStringBuilder = new StringBuilder("Hello World!");

(一)设置容量和长度
  虽然 StringBuilder对象是动态对象,允许扩充它所封装的字符串中字符的数量,但是您可以为它可容纳的最大字符数指定一个值。此值称为该对象的容量,不应将它与当前 StringBuilder对象容纳的字符串长度混淆在一起。例如,可以创建StringBuilder类的带有字符串“Hello”(长度为 5)的一个新实例,同时可以指定该对象的最大容量为 25。当修改StringBuilder时,在达到容量之前,它不会为其自己重新分配空间。当达到容量时,将自动分配新的空间且容量翻倍。可以使用重载的构造函数之一来指定 StringBuilder类的容量。以下代码示例指定可以将 MyStringBuilder对象扩充到最大 25个空白。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!", 25);
另外,可以使用读/写 Capacity属性来设置对象的最大长度。以下代码示例使用 Capacity属性来定义对象的最大长度。
MyStringBuilder.Capacity= 25;

(二)下面列出了此类的几个常用方法:
(1)Append 方法可用来将文本或对象的字符串表示形式添加到由当前 StringBuilder对象表示的字符串的结尾处。以下示例将一个 StringBuilder对象初始化为“Hello World”,然后将一些文本追加到该对象的结尾处。将根据需要自动分配空间。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Append(" What a beautiful day.");
Console.WriteLine(MyStringBuilder);
此示例将 Hello World! What abeautiful day.显示到控制台。

(2)AppendFormat 方法将文本添加到 StringBuilder的结尾处,而且实现了 IFormattable接口,因此可接受格式化部分中描述的标准格式字符串。可以使用此方法来自定义变量的格式并将这些值追加到 StringBuilder的后面。以下示例使用 AppendFormat方法将一个设置为货币值格式的整数值放置到 StringBuilder的结尾。
int MyInt= 25;
StringBuilder MyStringBuilder = new StringBuilder("Your total is ");
MyStringBuilder.AppendFormat("{0:C} ", MyInt);
Console.WriteLine(MyStringBuilder);
此示例将 Your total is $25.00显示到控制台。

(3)Insert 方法将字符串或对象添加到当前 StringBuilder中的指定位置。以下示例使用此方法将一个单词插入到 StringBuilder的第六个位置。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Insert(6,"Beautiful ");
Console.WriteLine(MyStringBuilder);
此示例将 Hello BeautifulWorld!显示到控制台。

(4)可以使用 Remove方法从当前 StringBuilder中移除指定数量的字符,移除过程从指定的从零开始的索引处开始。以下示例使用 Remove方法缩短 StringBuilder。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Remove(5,7);
Console.WriteLine(MyStringBuilder);
此示例将 Hello显示到控制台。

(5)使用 Replace方法,可以用另一个指定的字符来替换 StringBuilder对象内的字符。以下示例使用 Replace方法来搜索StringBuilder对象,查找所有的感叹号字符 (!),并用问号字符 (?)来替换它们。
StringBuilderMyStringBuilder = new StringBuilder("Hello World!");
MyStringBuilder.Replace('!', '?');
Console.WriteLine(MyStringBuilder);

此示例将 Hello World?显示到控制台

getSqlMapClientTemplate().queryForList((new StringBuilder()).append(entityClass.getName()).append(".select").toString(), null);

Java的StringBuilder类

如果程序对附加字符串的需求很频繁,不建议使用+来进行字符串的串联。可以考虑使用java.lang.StringBuilder 类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder 对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder 类能使效率大大提高。如下代码:

Java代码 
public   class AppendStringTest   
{   
     public   static   void main(String[] args)   
            {   
                   String text = "" ;   
                  
                   long beginTime = System.currentTimeMillis();   
                   for ( int i= 0 ;i< 10000 ;i++)   
                         text = text + i;   
                   long endTime = System.currentTimeMillis();   
                   System.out.println("执行时间:" +(endTime-beginTime));   
   
                   StringBuilder sb = new StringBuilder ( "" );   
                   beginTime = System.currentTimeMillis();   
                   for ( int i= 0 ;i< 10000 ;i++)   
                          sb.append(String.valueOf(i));   
                   endTime = System.currentTimeMillis();   
                   System.out.println("执行时间:" +(endTime-beginTime));   
   
            }   
}   
public class AppendStringTest
{
     public static void main(String[] args)
            {
                   String text = "";
               
                   long beginTime = System.currentTimeMillis();
                   for(int i=0;i<10000;i++)
                         text = text + i;
                   long endTime = System.currentTimeMillis();
                   System.out.println("执行时间:"+(endTime-beginTime));

StringBuilder sb = new StringBuilder ("");
                   beginTime = System.currentTimeMillis();
                   for(int i=0;i<10000;i++)
                          sb.append(String.valueOf(i));
                   endTime = System.currentTimeMillis();
                   System.out.println("执行时间:"+(endTime-beginTime));

}
} 此段代码输出:

执行时间:3188
执行时间:15

StringBuilder 是j2se1.5.0才新增的类,在此之前的版本若有相同的需求,则使用java.util.StringBuffer。事实上StringBuilder 被设计为与StringBuffer具有相同的操作接口。在单机非线程(MultiThread)的情况下使用StringBuilder 会有较好的效率,因为StringBuilder 没有处理同步的问题。StringBuffer则会处理同步问题,如果StringBuilder 会有多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。

StringBuilder的介绍(转载!)相关推荐

  1. 源代码文档生成 Doxygen介绍(转载)

    源代码文档生成 Doxygen介绍(转载) 收藏 Doxygen介绍 一.Doxygen介绍 在项目开发过程中最重要的是如何和团队中其它成员沟通,如何在项目完成后减低维护成本,随着公司的人员流动,怎样 ...

  2. CCC认证介绍(转载)

    CCC认证介绍(转载) CCC认证介绍 http://www.quality-world.cn/guanli/367.html CCC为英文 ChinaCompulsoryCertification ...

  3. CE认证介绍(转载)

    2007 年 07 月 29 日, 星期日 --&gt CE认证介绍(转载) CE认证介绍 http://www.quality-world.cn/guanli/378.html " ...

  4. Html5 WebSocket 技术介绍(转载)

    WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时向前端推送消息,以保证前后台状态统一,在传统的无状态HTTP协议中,这 ...

  5. Redis的Java客户端Jedis的八种调用方式(事务、管道、分布式…)介绍--转载

    原文地址:http://www.blogways.net/blog/2013/06/02/jedis-demo.html redis是一个著名的key-value存储系统,而作为其官方推荐的java版 ...

  6. 注释驱动的 Spring cache 缓存介绍--转载

    概述 Spring 3.1 引入了激动人心的基于注释(annotation)的缓存(cache)技术,它本质上不是一个具体的缓存实现方案(例如 EHCache 或者 OSCache),而是一个对缓存使 ...

  7. IE 8 Accelerator加速器开发介绍{转载}

    记录这篇博客的原因是因为我自己想要有一个快速的加速器,就是我经常在浏览网页的时候,看到有些网址,如果想要转过去的话,我必须手工复制到地址栏,然后回车一下.然后我就想,如果能直接通过一个快捷方式就太好了 ...

  8. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  9. JSP中meta http-equiv=pragma content=no-cache属性ttp-equiv功能介绍转载

    http-equiv顾名思义,相当于http的文件头作用,它可以向浏览器传回一些有用的信息,以帮助正确和精确地显示网页内容,与之对应的属性值为content,content中的内容其实就是各个参数的变 ...

  10. 四层和七层负载均衡的区别介绍(转载)

    简单理解四层和七层负载均衡: ①所谓四层就是基于IP+端口的负载均衡:七层就是基于URL等应用层信息的负载均衡:同理,还有基于MAC地址的二层负载均衡和基于IP地址的三层负载均衡. 换句换说,二层负载 ...

最新文章

  1. NVIDIA A100 GPUs上硬件JPEG解码器和NVIDIA nvJPEG库
  2. linux的mysql主主_Linux下指定mysql数据库数据配置主主同步的实例
  3. (七)数据结构之“字典”
  4. 1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文
  5. 大数据技术 学习之旅_如何开始您的数据科学之旅?
  6. Android11怎么截屏,对标IOS?Android11或无缘屏幕长截图
  7. html文件变成巨大,巨大的JavaScript HTML5 blob(从大ArrayBuffers)在客户端构建一个巨大的文件...
  8. 音视频开发(Anychat如何改善音视频通话过程中的用户体验)
  9. jqGrid宽度自适应
  10. 完整版的OpenLDAP搭建全过程
  11. 如何用 R 语言的 Shiny 库编写 web 程序
  12. RSA算法原理及数字签名技术
  13. 短视频剪辑如何入门?给初学者的三个小建议,助你快速入门
  14. Java多线程系列--“JUC线程池”03之 线程池原理——线程池源码分析
  15. 从小米智能家居入手,揭秘物联网关键技术
  16. 怀化市2021年高考查询成绩,2021年怀化高考状元是谁分数多少分,历年怀化高考状元名单...
  17. linux x86_64和linux aarch64如何选择
  18. DOS窗口中使用的命令行
  19. backlight驱动
  20. matlab怎么导入数据格式,matlab导入excel表格数据代码,如何将excel中数据导入到matlab中...

热门文章

  1. bilibili执行董事陈睿:我在进B站之前是一个正常人
  2. 关于置信水平,求区间的简便算法
  3. a10 amd 安装黑苹果_黑苹果整合版系统U盘镜像Niresh macOS Sierra 10.12.3 支持Intel/AMD......
  4. 量化套利策略|套利策略的原理
  5. 8、Flume 日志采集工具
  6. Oracle中的空值问题
  7. Jenkins的分布式构建及部署(master~slaver)
  8. DAY1(02-HTML标签(上))
  9. 分页查询优化方案总结
  10. 数智时代,英特尔的“三个火枪手”