zoukankan      html  css  js  c++  java
  • StringBuilder / StringBuffer类

    StringBuilder类StringBuffer 类的由来?    

       在Java中使用String 类可以描述所有的字符串数据,但是String类的对象一旦创建,则该对象的字符序列 就不可更改,当需要更改字符串内容时,需要拷贝出来多个副本单独进行保存,因此对空间 和 时间 的消耗会比较大。

    而StringBuilder类 和 StringBuffer 类 ,这两个类描述的字符序列可以直接更改。可以使用StringBuilder类 和 StringBuffer 类,来解决这样的问题

    StringBuilder类 和 StringBuffer 类的比较?

        StringBuffer类早期存在的类,  支持线程同步/安全,  因此效率比较低

        StringBuilder类后来增加的类不支持线程同步/安全,因此效率比较高


     一、StringBuilder类

    1. 概述

       java.lang.String 类由 final 修饰,表示该类不能被继承。

      该类用于描述 可变的字符序列 , 不支持线程的同步 / 安全,因此效率比较高。

    2. 常用方法

    2.1构造方法:

       StringBuilder()                             -使用无参的形式进行对象的构造,初始容量是16个字符。

       StringBuilder(String  str)              -容量为16 + 字符串的长度

       StringBuilder(int capacity          - 根据参数指定的容量来构造该类的对象

    2.2普通方法:

           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 类


     思考: 既然直接对当前字符串更改即可,为何还需要有返回值?

       返回值的目的是为了能够进行多次连续的调用。


  • 相关阅读:
    XCTF-crypto---转轮机加密
    [Audio processing] wav音频文件读取int和double数组的关系
    [已解决问题] An error occurred while automatically activating bundle com.android.ide.eclipse.adt
    [C++关键字] alignof & alignas 内存对齐 sizeof 占内存大小
    [C++关键字] 内置类型
    [Git] MAC上Git初探
    [基础] 各种分类器比较
    [基础] 虚函数
    [工具] Numpy
    [基础] 模板+友元类外定义
  • 原文地址:https://www.cnblogs.com/penguin1024/p/11746584.html
Copyright © 2011-2022 走看看