2019-05-23 Java学习日记 day13

StringBuffer类

概述:线程安全的可变字符序列

StringBuffer和String的区别

  String是一个不可变的字符序列

  StringBuffer是一个可变的字符序列

StringBuffer构造方法

public class demo1_String {
    /*    StringBuffer的构造方法
     *     public StringBuffer():无参构造方法
     *     public StringBuffer(int capacity):指定容量的字符串缓冲区对象
     *     public StriingBuffer(String str):指定字符串内容的字符串缓冲区对象
     * 
     * StringBuffer的方法:
     *     public int capacity():返回值当前容量。理论值(不掌握)
     * public int length():返回长度(字符数).实际值
     * */
    public static void main(String[] args) {
    StringBuffer sb =new StringBuffer();
    System.out.println(sb.length());    //容器中的字符个数,实际值
    System.out.println(sb.capacity()); //容器的初始容量,理论值
    
    StringBuffer sb2= new StringBuffer(10);
    System.out.println(sb2.length());
    System.out.println(sb2.capacity());
    
    StringBuffer sb3= new StringBuffer("heima");
    System.out.println(sb3.length());
    System.out.println(sb3.capacity());

    }

}

StringBuffer添加功能

package tan.jung.string;

import javax.swing.plaf.synth.SynthProgressBarUI;

public class demo2_StringBuffer {
    /*    public StringBuffer append(String str):
     *         可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
     *     public StringBuffer insert(int offset,String str):
     *         在制定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
     * 
     *     StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,
     *     底层是一个长度16的字符数组,当调用添加的方法时,不会再重新创建对象,
     *     再不断向原缓冲区添加字符
     * */
    public static void main(String[] args) {
        //demo1();
        StringBuffer sb1 =new StringBuffer("12345");
        sb1.insert(3,"heima");
        
        System.out.println(sb1);

    }

    private static void demo1() {
        StringBuffer sb1 =new StringBuffer();
        StringBuffer sb2 =sb1.append(true);
        StringBuffer sb3 =sb1.append("heima");
        StringBuffer sb4 = sb1.append(100);
        
        System.out.println(sb1.toString());//重写了
        System.out.println(sb2.toString());
        System.out.println(sb3.toString());
        System.out.println(sb4.toString());
    }

}

StringBuffer的删除功能

package tan.jung.string;

public class demo3_StringBuffer {
    /*        public StringBuffer deleteCharAt(int index):
     *             删除指定位置的字符,并返回本身
     *         public StringBuffer delete(int start,int end):
     *             删除从指定位置开始指定位置结束的内容,并返回本身
     * */
    public static void main(String[] args) {
        StringBuffer sb1=new StringBuffer();
        //sb1.deleteCharAt(4);//当缓冲区中这个索引上没有原始就会报错
        sb1.append("woaixuexi");
        //sb1.deleteCharAt(2);
        //System.out.println(sb1);
        
        //sb1.delete(1, 2);  //包含头,不包含尾
        //System.out.println(sb1);
        sb1.delete(0, sb1.length());  //情况缓冲区
        System.out.println(sb1);
        

    }

}
案例

StringBuffer替换和反转功能

public class demo4_StringBuffer {
    /* StringBuffer的替换功能
     *     public StringBuffer replace(int start,int end,String str):
     *         从start开始到end用str替换
     * 
     * StringBuffer的反转功能
     *     public StringBuffer reverse():
     *         字符串反转    
     *   
     * */
    
    public static void main(String[] args) {
        StringBuffer sb1 = new StringBuffer("heima");
        sb1.replace(0, 3, "bai");
        System.out.println(sb1);
        sb1.reverse();
        System.out.println(sb1);

    }

}
案例

StringBuffer的截取功能

public class demo5_StringBuffer {
    /* public StringBuffer subString(int start):
     *         从指定位置截取到末尾
     * public StringBuffer subString(int start,int end):
     *         截取从指定位置开始到结束位置,包括开始位置,不包括结束位置
     *         
     *         注意:返回值类型不再是StringBuffer本身
     * */
    public static void main(String[] args) {
        StringBuffer sb1=new StringBuffer("woaiheima");
         //String str =sb1.substring(4);
         //System.out.println(str);
         
         String str2 =sb1.substring(4, 9);
         System.out.println(str2);

    }

}
案例

StringBuffer和String的相互转换

public class demo6_StringBuffer {
   
    public static void main(String[] args) {
        //demo1(); String 转 StringBuffer
        StringBuffer sb1=new StringBuffer("woaiheima");        
        String s1=new String(sb1);//StringBuffer转String
        System.out.println(s1);
        
        System.out.println(s1.toString());
        //通过toString方法将StringBuffer转String
        
        String s2=sb1.substring(0,sb1.length());
        System.out.println(s2);
        //通过截取字符串将StringBuffer转换为String

    }

    private static void demo1() {
        StringBuffer sb1=new StringBuffer("woaiheima");
        //通过构造方法将字符串转换为StringBuffer对象
        System.out.println(sb1);
        
        StringBuffer sb2=new StringBuffer();
        //通过append方法将字符串转化为StringBuffer对象
        sb2.append("heima");
        System.out.println(sb2);
    }

}
案例
package tan.jung.test;

public class test1 {

    public static void main(String[] args) {
        int [] arr={1,2,3};
        System.out.println(array2String(arr));

    }
    public static String array2String(int [] arr){
        StringBuffer sb1 = new StringBuffer();//创建字符串缓冲区对象
        sb1.append("["); //将 [ 添加到缓冲区
        
        for (int i = 0; i < arr.length; i++) { //遍历数组
            if(i ==arr.length-1){
            sb1.append(arr[i]).append("]");
            }else{
            sb1.append(arr[i]).append(",");
            }
        }
        return sb1.toString();
    }
}
数组转换成字符串练习题
package tan.jung.test;

import java.util.Scanner;

public class test2 {

    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入数据");
        String line=sc.nextLine();
        
//        StringBuffer sb1=new StringBuffer(line);
//        sb1.reverse();
//        System.out.println(sb1);
        
        System.out.println(array2String(line));
         //调用了array2String(String line)的结果
         
    }
    public static String array2String(String line){
        StringBuffer sb2 = new StringBuffer(line);
        sb2.reverse();
        
        return sb2.toString();
    }
}
字符串反转

StringBuffer和StringBuilder

StringBuffer是jbk1.0版本的,是线程安全的,效率低

StringBuilder是jdk1.5版本的,是线程不全安的,效率高

String是一个不可变的字符序列

StringBuffer,StringBuilder 是可变的字符序列

public class demo7_StringBuffer {
    /*    形式参数问题
     *         String作为参数传递
     *         StringBuffer作为参数传递
     * 
     * 基本数据类型的值传递,不改变其值
     * 引用数据类型的值传递,可以改变其值
     * 
     * String类虽然是引用数据类型,但是他作为参数传递是和基本数据类型是一样的
     * */
    public static void main(String[] args) {
        String s="heima";
        System.out.println(s);
        Change(s);
        System.out.println(s);
        
        StringBuffer sb =new StringBuffer();
        sb.append("heima");
        System.out.println(sb);
        Change(sb);
        System.out.println(sb);

    }

    public static void Change(StringBuffer sb) {
        sb.append("baima");
        
    }

    public static void Change(String s) {
        s +="itcast";
        
    }

}
String和StringBuffer区别

猜你喜欢

转载自www.cnblogs.com/JungTan0113/p/10915567.html