zoukankan      html  css  js  c++  java
  • 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区别
  • 相关阅读:
    java 应用使用jfr+sjk 生成应用火焰图
    使用btrace 分析java 应用
    vigil监控以及webhook使用
    honest-profiler+hprof2flamegraph 基础的扩展
    honest-profiler+hprof2flamegraph 查看java 应用火焰图信息
    Quark 基于electron 的跨平台应用开发ide
    nodejs 应用火焰图简单分析
    docker 中试用jfr
    使用foreman 管理基于Procfile 的应用
    xfs validation inode faild 问题解决
  • 原文地址:https://www.cnblogs.com/JungTan0113/p/10915567.html
Copyright © 2011-2022 走看看