一, 什么是StringBuffer 和 为何需要StringBuffer

http://blog.csdn.net/nvd11/article/details/19552449

本人在上篇介绍String 类 的博文里提过:

String类 是代表字符串的类, 但是String类指向的字符串是常量是不可修改的.

而且String类本身没有提供类似 insert, delete, set等修改字符串的方法.

例如:

1个String对象的值是abcde

String s = "abcde";

如果想把第4个字符("d")删掉.

String是没有提供类似 delete(int charIndex)的方法的.

当然, 程序猿可以用

String s2 = s.replace(s.substring(3,4), "");

来解决问题.

但是, 上面的语句实际上在内存堆区里划分了两个额外的String对象空间. 而且如果有多个相同的字符的话"d", 就会出错.

所以如果只用String类来处理字符串的话, 不但实现起来比较复杂, 而且很耗费时间和空间(内存).

更何况有些字符处理需求只用String类很难实现, 例如在第1个b后面插入一段字符串..

所以Java提供了另一个类StringBuffer让程序猿更方便地进行字符串处理.

String类实际之上指向数据区的字符串常量.

而StringBuffer会把字符串当做字符数组在堆区处理, 所以StringBuffer的内容是可以修改的.

而且StringBuffer 提供了相当多的字符串修改函数, 如果一个java程序经常处理字符串, 建议使用StringBuffer类.

StringBuffer可以通过toString()函数返回1个String对象函数.

二, StringBuffer的常用构造函数.

1.

public StringBuffer()

这种无参的构造函数代表创建1个空的,没有任何字符的StringBuffer对象.

2.

public StringBuffer(int capacity)

构造1个空的, 没有任何字符串的StringBuffer对象, 但是具有长度为capacity的初始容量.  而上面那个无参构造方法的初始容量为0.

如果capacity 参数小于0则抛出异常.

注意

Capacity 指的的是StringBuffer可以存放的字符长度, 而不是当前字符长度length(), 如果length超过capacity, 则该对象在内存里必须重新动态分配,获得更大的capacity.

类似于c语言的malloc 与realloc函数.

3.

public StringBuffer(String str)

创建1个StringBuffer对象, 并将内容初始化为与String对象 str一样的字符序列.  其capacity为str.length() + 16.

这个是最常用的构造方法.

三, StringBuffer的常用方法.

1. public void setLegnth(int newLength)

将StringBuffer对象的当前长度设为新的长度newLength.

如果currentLength <= newLength,   则新的位置全部为"\0000", 亦即系Null值.

如果currentLength > newLength,  相当于该对象执行了substring(0,newLength - 1) ,被截断了.

例子:

package String_kng;public class StringBuffer_2{public static void f(){StringBuffer sb = new StringBuffer("InterMilan");System.out.printf("length of sb is %d\n",sb.length());     System.out.printf("char[5] of sb is %c\n",sb.charAt(5));     try{System.out.printf("char[10] of sb is %c\n",sb.charAt(10));     }catch(StringIndexOutOfBoundsException e){System.out.printf("Index 10 is out of bounds\n");}sb.setLength(12);System.out.printf("\nsb is %s\n",sb);     System.out.printf("length of sb is %d\n",sb.length());     System.out.printf("char[10] of sb is %c\n\n",sb.charAt(10));     sb.setLength(5);System.out.printf("sb is %s\n",sb);     try{System.out.printf("char[5] of sb is %c\n",sb.charAt(5));     }catch(StringIndexOutOfBoundsException e){System.out.printf("Index 5 is out of bounds\n");}}
}

输出:

     [java] length of sb is 10[java] char[5] of sb is M[java] Index 10 is out of bounds[java] [java] sb is InterMilan[java] length of sb is 12[java] char[10] of sb is [java] [java] sb is Inter[java] Index 5 is out of bounds

2. public StringBuffer insert(int offset, String str)

在指定位置(index 为 offset)插入一段字符. 返回修改后的StringBuffer对象引用,调用该方法的对象没被修改

注意insert 有另1个重载 insert(int offset, double d)   无非就是把double类型转成字符

3. public StringBuffer delete(int start, int end)

删除指定位置的字符, 并返回修改后的StringBuffer对象引用.

4. public StringBuffer append(....)

append函数具有多个重载, 也就是支持多种类型的参数.

append表示在尾部追加, sb.append(str)相当于sb.insert(sb.length(),str)

5. public StringBuffer reverse()

字符串倒置, 例如"Inter" 倒置后就是"retnI"

其余还有很多于String类一样的方法, 例如 substring, indexOf 等等, 不详细讲了, 可以参考我之前的介绍String类的文章.

Java 里的字符串处理类StringBuffer简介相关推荐

  1. Java里的字符串, String类简单介绍.

    String类在java面试中也是1个常见的问题点. 所以也是写在这里方便以后查阅了. 大家都知道c语言里是没有String 字符串这个数据类型的. 只能用字符数组的1个特殊形式来表示一个字符串, 就 ...

  2. 【Java 基础】字符串StringBuilder、StringBuffer,工具StringJoiner

    字符串StringBuilder.StringBuffer,工具StringJoiner 一.概述 二.StringBuilder 三.StringBuffer 三.StringBuilder .St ...

  3. java工具类使用逗号切割字符串_【java】分割字符串工具类,霸气 jdk自带的

    java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij;k;lm,no,p;qr,st"按逗号 ...

  4. java里创建一个长方形类_定义一个长方形类,定义 求周长和面积的方法实例

    /* 定义一个长方形类,定义 求周长和面积的方法, 然后定义一个测试了Test2,进行测试. 长方形的类: 成员变量: 长,宽 成员方法: 求周长:(长+宽)*2; 求面积:长*宽 注意: impor ...

  5. java 生成UUID字符串工具类 UUIDUtil

    package com.xj.hhjk.common.util.security; import java.util.UUID; import java.util.regex.Matcher; imp ...

  6. java中操作字符串都有哪些类,他们之间有什么区别?

    java中操作字符串的类有哪些? String StringBuffer StringBuilder 区别 我们可以先看一下这几个类的继承关系图 从类的继承关系上来开的话,String和StringB ...

  7. 2.Java中String,StringBuilder以及StringBuffer的关系与区别

    String     StringBuffer     StringBuilder String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量 ...

  8. Java单元测试与Jutil详解(一) 简介

    1.什么是单元测试 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,Java里单元指一个类.总的来说,单元就是人为规定的最小的被测功能模块. ...

  9. 【转】Java里如何实现线程间通信

    正常情况下,每个子线程完成各自的任务就可以结束了.不过有的时候,我们希望多个线程协同工作来完成某个任务,这时就涉及到了线程间通信了. 本文涉及到的知识点:thread.join(), object.w ...

最新文章

  1. linux之shell脚本学习篇一
  2. java爬树方法_Java-grandMother.java
  3. GameBryo Shader 组织方式
  4. 解决关闭hdfs yarn spark hbase时no namenode to stop异常 no master to stop
  5. python之网络编程 --- TCP编程
  6. kubernetes的常用命令
  7. php UTF8 转字节数组,后使用 MD5 计算摘要
  8. 山东省特种设备作业考试系统_2019防爆电气作业在线免费模拟考试系统及模拟题库5...
  9. 数据分析 超市条码_超市卖场管理四要素!走好千里之行的第一步!
  10. uc云观媒体服务平台_自媒体平台UC云观开放收益功能,自媒体作者有收入了
  11. 腾讯bugly android sdk镜像,Android 腾讯bugly接入记录教程
  12. python之简单的文件处理
  13. Power BI项目之某公司内部数据分析
  14. 1000K流量架构演进之术-吐血整理篇
  15. PCIe 6.0时代即将到来 你准备好了吗?
  16. 动漫APP软件开发源码私有部署
  17. 热成型容器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. 全国智能制造(中国制造2025)创新创业大赛华东赛区决赛完美收官
  19. MetaSea即将全球上线,6000张波塞冬神殿NFT限量开放
  20. 微信APP支付服务端和Android 端详解及其demo

热门文章

  1. AI玩微信跳一跳的正确姿势:一不小心就超越了最高分,瞬间称霸了朋友圈~
  2. 【django】创建django项目工程
  3. apatedns unhandled exception
  4. nginx + openssl 搭建需要身份验证的文件下载服务器
  5. GetDiskFreeSpace 和 GetDiskFreeSpaceEx
  6. 160个Crackme029
  7. 【Apache】指定 某一个URL 并进行 Auth 认证
  8. 5、Java Swing JButton:按钮组件
  9. 1.4 Float类
  10. 谈C++求a+b(大神勿喷)