Day10:StringBuffer与StringBuilder

这两个是String工具类的操作工具,主要涉及到字符串的计算

/*
         * StringBuffer:字符串缓冲区。
         * 作为一个字符容器。
         * 特点:
         * 1,长度可以变化。
         * 2,可以对内容通过指定方法进行修改。
         * 3,容器对象一般都会具备对容器中的元素进行操作的功能。增删该查。
         * 4,缓冲区可以存储不同类型的数据。
         * 5,最终缓冲区存储完的数据都会变成字符串。
         * 
         * 
         */
        String str = "a"+4+'c';
        //在内存中的过程。1,创建一个字符串缓冲区容器。2,将要组成字符串的元素先存储起来。3,最后将缓冲区填充数据变成字符串。
        str = new StringBuffer().append("a").append(4).append('c').toString();
/*
         * StringBuffer
         * 缓冲区可以对数据进行临时存储。
         * 
         * 了解缓冲区的常见方法。
         * 添加元素:
         * StringBuffer append(各种类型的数据);追加。
         * StringBuffer insert(index,各种类型的数据):指定位置添加。
         * 
         */
        
        //1,创建一个缓冲区对象。
        StringBuffer sb = new StringBuffer();
        
        //2,追加一个字符串。
        sb.append("abc");
        
        //3,插入一个boolean值true。
        sb.insert(1, true);
        
    
        
        //4,删除字符。
//        sb.delete(1, 4);
        
        
        //5,修改字符。
        sb.replace(1, 5, "false");
        
//        sb.setLength(20);
        sb.reverse();
        System.out.println(sb);//println方法会将所有要打印的数据先转成字符串在输出。对于对象会自动调用toString方法。
        
        
        
        /*
         * 字符串缓冲区中维护了一个"可变长度的数组"
         * 解释:其实就是超出内部数组长度后,新建数组长度要是原数组的1.X倍数。
         * 并将原数组的数据复制到新数组中,并将新的元素也添加到新数组中。
         * 
         */
package cn.itcast.stringbuffer.demo;

public class StringBufferTest {

    /**
     * @param args
     */
    public static void main(String[] args) {

        /*
         * 1,通过缓冲区,将要打印的矩形组成元素*进行存储后,一次性返回。并输出。
         * 
         * 2,将int数组的元素转成字符串。格式为:[34,12,67]
         * 
         * 什么时候用字符串缓冲区。
         * 数据很多,个数无所谓确定,类型无所谓确定,只要最后都转成字符串。
         * 就使用StringBuffer这个容器。
         * 使用的局限性:1,必须最终转成字符串。
         *                2,无法对存储进来的元素进行单独操作。因为存储进来的元素都变成字符串。
         * {"abc","haha"} StringBuffer sb = new StringBuffer("abc");sb.append("haha")--->  "abchaha";
         */

        StringBuffer buf1 = new StringBuffer("hello");
        StringBuffer buf2 = new StringBuffer("java");
        test(buf1, buf2);
        System.out.println(buf1+"...."+buf2);

//        String rec = draw(8, 5);
//        System.out.println(rec);
        
        int[] arr = {34,12,67,43,29};
//        String s = toString(arr);
        String s = toString2(arr);
        System.out.println(s);

    }

    public static void test(StringBuffer buf1, StringBuffer buf2) {

        buf1.append(buf2);

        buf1 = buf2;

    }

    /*
     * 画矩形的功能。 将需要组成矩形的元素进行临时存储。
     */
    public static String draw(int row, int col) {

        // 定义一个临时容器。
        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                sb.append("*");
            }
            sb.append("
");
        }

        return sb.toString();
    }
    /**
     * int数组转成字符串,通过StringBuffer
     */
    public static String toString2(int[] arr){
        
        StringBuffer sb = new StringBuffer();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if(i!=arr.length-1){
                sb.append(arr[i]+", ");
            }else{
                sb.append(arr[i]+"]");
            }
        }
        return sb.toString();
        
    }
    /**
     * int数组转成字符串。
     */
    public static String toString(int[] arr) {

        String str = "[";
        for (int i = 0; i < arr.length; i++) {
            if (i != arr.length - 1) {
                str += arr[i] + ", ";

            } else {
                str += arr[i]+"]";
            }
        }
        return str;
    }
}
     /*
         * JDK1.5以后,出现了StringBuilder和StringBuffer用法一样。
         * StringBuffer是线程同步的。
         * StringBuilder是线程不同步的。
         * 一般可以建议选择StringBuilder。因为速度快。
         * 
         * synchronized append();
         * 
         * synchronized insert();
         * 
         * synchronized delete();
         * 
         * 
         */
原文地址:https://www.cnblogs.com/vijay/p/3508061.html