博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
StringBuffer帮你减轻Java的负担
阅读量:6095 次
发布时间:2019-06-20

本文共 2680 字,大约阅读时间需要 8 分钟。

处理文本值是程序员的日常,通常用标准的Java String类来完成与文本有关的需求。它对于很多小任务确实很适用,但是如果处理的是大型任务,它会大量消耗系统资源。由于这个原因,JDK引入了StringBuffer类以提供一条处理字符串的有效路径。让我们来看看怎样用这个类来提升性能。

  为什么不用标准的String?

  Java String对象是常量字符串。一旦被初始化和付值,它的值和所分配的内存就被固定了。如果硬要改变它的值,将会产生一个包含新值的新String对象。这就是String对象会消耗掉很多资源的原因。下面的代码创建了一个String对象并使用串联(+)符号来为它添加更多字符:

  String sample1=new String(“Builder.com”);
sample1+=”is”;
sample1+=”the place”;
sample1+=”to be.”;

  系统最终会创建四个String对象来完成上面的替换。其中第一个的文本是Builder.com。然后每次添加文本时都会创建一个新的对象。

  这种方法的问题在于为了这么一个简单的过程而消耗了太多的资源。在这个例子中其影响也许很小(指给出了很少的代码),但是在一个拥有多得多操作的大型应用程序中这样做就会使性能下降。StringBuffer类所要解决的正是这个问题。

  用StringBuffer处理字符串

  StringBuffer类被设计用与创建和操作动态字符串信息。为该对象分配的内存会自动扩展以容纳新增的文本。有三种方法来创建一个新的StringBuffer对象:使用初始化字符串、设定大小以及使用默认构造函数:

  StringBuffer sb=new StringBuffer();
StringBuffer sb=new StringBuffer(30);
StringBuffer sb=new StringBuffer(“Builder.com”);

  第一行创建了不包含任何文本的对象,默认的容量是16个字符。类的第二个实例也不包含文本,容量是30个字符,最后一行创建了一个拥有初始化值的对象。StringBuffer类位于java.lang基础包中,因此要使用它的话不需要特殊的引入语句。

  一旦创建了StringBuffer类的对象,就可以使用StringBuffer类的大量方法和属性。最显著的方法是append,它将文本添加到当前StringBuffer对象内容的结尾。下面的代码示例了append方法的语法:

  StringBuffer sb=new StringBuffer();
sb.append(“B”);
sb.append(“u”);
sb.append(“i”);
sb.append(“l”);
sb.append(“d”);
sb.append(“e”);
sb.append(“r”);
sb.append(“.com”);
System.out.println(sb.toString());

  这些代码创建了Builder.com字符串并将它送往标准输出,但是只创建了一个对象。如果使用String对象就需要八个以上的对象。注意代码利用了StringBuffer类的toString方法。这个方法将其内容转换成一个可以被用于输出的字符串对象。它允许操作对应的文本用于输出或数据存储。

  append方法有十种重载形式,允许将各种类型的数据添加到对象的末尾。StringBuffer类还提供了处理对象内部数据的方法。

  StringBuffer的容量

  可以使用capacity和length方法来设定对象内的字符数。capacity方法返回为对象分配的字符数(内存)。如果超过了容量,它会自动扩展以符合需求。length方法返回对象目前存储的字符数。可以通过setLength方法来增加其长度。另外,对象的容量可以通过ensureCapacity方法来扩展。它建立了对象的最小容量,因此如果超出则不会有任何问题。下面的代码用到了这些方法:

  StringBuffer sb=new StringBuffer();
sb.ensureCapacity(40);
sb.append(“Builder.com is awesome!”);
Systrm.out.println(sb.toString());
sb.setLength(11);
Systrm.out.println(sb.toString());

代码设置了字符串的容量并为其付值。length属性被重新设置了,因此文本被截断了。输入结果如下:

  Builder.com is awesome!

  Builder.com

  操作字符串

  还有更多的方法来处理存储在StringBuffer对象内的字符串。以下列举了几个例子:

  CharAt返回字符串中的单个字符。

  SetCharAt为字符串中的单个字符付值或进行替换。

  GetChars返回字符串的一个子字符串。

  Insert在字符串指定位置插入值。它有多个重载版本以容纳各种数据类型。

  Substring返回字符串的一个子集。

  Reverse倒置StringBuffer的内容。

  所有的方法对于操作值来说都是很有用的,但是reverse方法最酷了——它使你只用一个调用就轻松地倒置了一个字符串。下面的代码和数出结果作了示范:

  StringBuffer sb=new StringBuffer();
sb.ensureCapacity(100);
sb.append(“Builder.com!”);
System.out.println(sb.toString());
sb.reverse();
Systrm.out.println(sb.toString());

  输出:

  Builder.com!

  !moc.redliuB

  StringBuffer的优势

  字符串的使用贯穿于决大多数应用程序,不管是作为用户界面的标识或在后台处理从数据库取回的值。通常,这些值并不符合要求,需要处理。你可以使用String类,但是它并不是设计成处理动态值的。而StringBuffer类正好填补了这个需求并使得系统资源的利用更加有效。   

最新内容请见作者的GitHub页:http://qaseven.github.io/

   

转载地址:http://ikzza.baihongyu.com/

你可能感兴趣的文章
搭建了一个小型VR游乐园,Topshop的营业额蹭蹭上涨
查看>>
「镁客·请讲」EAI科技龙军:从模块化切入,做服务机器人整体解决方案
查看>>
用户对物联网设备的“宽容”会让物联网陷入反乌托邦?
查看>>
FBS2017: 伊利智慧 惊艳登场
查看>>
安卓问题集-Installation error: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED
查看>>
MySQL复制表结构和内容到另一张表(转)
查看>>
React Native在Windows下修改js代码后reload无效
查看>>
阿里首席技术官王坚:互联网将被区块链彻底重构,未来区块链将用于数据价值的交换...
查看>>
rabbitMQ、activeMQ、zeroMQ、Kafka、Redis 比较
查看>>
传阿里将在南京云栖大会推出国际短信服务 全面对标Twilio
查看>>
为什么说这件事“做梦都要想”?
查看>>
Chrome无法播放m3u8格式的直播视频流的问题解决
查看>>
日本公司推出云平台STYLY,零基础低配置也能开发VR内容
查看>>
javascript删除创建多个子节点
查看>>
使用 Ruff 开发板+ Link Develop 快速开发 IoT 应用(环境预配置版)
查看>>
阿里云共享和独享云虚拟主机该怎么选?
查看>>
「镁客·请讲」NXROBO林天麟:我们分三步走,首先要做的就是打通机器人行业的产业链...
查看>>
使用Visual Studio 利用WinGDB编译和远程调试嵌入式Linux的程序
查看>>
阿里园区竟然开了一家微笑就可以打折的店
查看>>
2016全国CIO大会在宁夏中卫盛大开幕
查看>>