码迷,mamicode.com
首页 > 其他好文 > 详细

StringBuilder / StringBuffer类

时间:2019-10-27 10:46:27      阅读:59      评论:0      收藏:0      [点我收藏+]

标签:不能被继承   void   size   abc   cap   class   ring   由来   offset   

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 startint 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类

标签:不能被继承   void   size   abc   cap   class   ring   由来   offset   

原文地址:https://www.cnblogs.com/penguin1024/p/11746584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!