StringBuilder / StringBuffer类
Posted penguin1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了StringBuilder / StringBuffer类相关的知识,希望对你有一定的参考价值。
StringBuilder类 和 StringBuffer 类的由来?
在Java中使用String 类可以描述所有的字符串数据,但是String类的对象一旦创建,则该对象的字符序列 就不可更改,当需要更改字符串内容时,需要拷贝出来多个副本单独进行保存,因此对空间 和 时间 的消耗会比较大。
而StringBuilder类 和 StringBuffer 类 ,这两个类描述的字符序列可以直接更改。可以使用StringBuilder类 和 StringBuffer 类,来解决这样的问题。
StringBuilder类 和 StringBuffer 类的比较?
StringBuffer类是早期存在的类, 支持线程同步/安全, 因此效率比较低;
StringBuilder类是后来增加的类,不支持线程同步/安全,因此效率比较高;
一、StringBuilder类
1. 概述
java.lang.String 类由 final 修饰,表示该类不能被继承。
该类用于描述 可变的字符序列 , 不支持线程的同步 / 安全,因此效率比较高。
2. 常用方法
StringBuilder() -使用无参的形式进行对象的构造,初始容量是16个字符。
StringBuilder(String str) -容量为16 + 字符串的长度
StringBuilder(int capacity) - 根据参数指定的容量来构造该类的对象
int capacity() -返回调用对象的容量
int length() -返回调用对象中字符的个数
StringBuilder insert( int offset, String str ) -用于将str 插入 到当前调用对象中 下标为offset的索引位置上,
StringBuilder append( String str ) -用于将str指向的字符串内容 追加 到当前字符串的末尾。
StringBuilder delete( int start, int end ) -用于 删除 字符串中 [start, end) 区间的子字符串内容
StringBuilder replace (int start, int end, String str ) -用于将当前字符串中 下标为[start, end) 区间的字符串内容 替换 成str
StringBuilder reverse() -用于 反转字符序列
代码:
package com.monkey1038; public class StringBuilderTest { public static void main(String[] args) { // 使用参数指定的字符串内容来构造对象,容量应该为 字符串长度 +16 StringBuilder sb1 = new StringBuilder("hello"); // 打印字符串对象的容量 int cc = sb1.capacity(); System.out.println(""hello"的容量值 :"+cc); // 5+16=21 5:"hello"的长度 System.out.println(); // 打印字符串对象中字符的个数 int length = sb1.length(); System.out.println(""hello"的字符个数:"+length); System.out.println(); // 思考:既然直接对字符串更改,为啥还要返回值呢? // 返回值的目的是 为了能够进行多次连续调用 // sb1.insert(2, "12345").append("12345").delete(0, 1).reverse().toString().length(); // 向下标为2的位置,插入字符串“1234” StringBuilder sb2 = sb1.insert(2, "1234"); System.out.println("向下标为2的位置,插入字符串“1234”: sb2= "+sb2); System.out.println(); System.out.println("打印sb1= "+sb1); System.out.println(); // 打印字符串对象的容量,当插入的数据没有超过容量时,则容量不变 // 当插入的数据内容超过容量范围时,容量变大 cc = sb1.capacity(); System.out.println(""hello"的容量:"+cc); System.out.println(); // 打印字符串对象中字符的个数 System.out.println(""hello"字符个数: "+sb1.length()); System.out.println(); // 向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾 sb1.insert(9, "ABCD"); System.out.println("向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾: sb1= "+sb1); System.out.println(); // 将字符串"world"追加到当前字符串的末尾 sb1.append("world"); System.out.println("将字符串"world"追加到当前字符串的末尾: sb1= "+sb1); System.out.println(); // 将字符串中 "1234"删除掉 sb1.delete(2, 6); // [2,6) System.out.println("将字符串中 "1234"删除掉: sb1= "+sb1); System.out.println(); // 将字符串中"ABCD"替换成"abcd" sb1.replace(5, 9, "abcd"); System.out.println("将字符串中"ABCD"替换成"abcd" sb1= "+sb1); System.out.println(); // 实现字符串的反转 sb1.reverse(); System.out.println("实现字符串的反转: sb1= "+sb1); } }
结果
"hello"的容量值 :21 "hello"的字符个数:5 向下标为2的位置,插入字符串“1234”: sb2= he1234llo 打印sb1= he1234llo "hello"的容量:21 "hello"字符个数: 9 向字符串中下标为9的位置 插入"ABCD",插入到当前字符串的末尾: sb1= he1234lloABCD 将字符串"world"追加到当前字符串的末尾: sb1= he1234lloABCDworld 将字符串中 "1234"删除掉: sb1= helloABCDworld 将字符串中"ABCD"替换成"abcd" sb1= helloabcdworld 实现字符串的反转: sb1= dlrowdcbaolleh
二、StringBuffer 类
以上是关于StringBuilder / StringBuffer类的主要内容,如果未能解决你的问题,请参考以下文章
stringbuffer与stringbuilder的区别?