zoukankan      html  css  js  c++  java
  • 13-01 java StringBuffer类,StringBuilder类

    StringBuffer类的构造方法

    package cn.itcast_01;
    
    /*
     * 线程安全(多线程讲解)
     * 安全 -- 同步 -- 数据是安全的
     * 不安全 -- 不同步 -- 效率高一些
     * 安全和效率问题是永远困扰我们的问题。
     * 安全:医院的网站,银行网站
     * 效率:新闻网站,论坛之类的
     * 
     * StringBuffer:
     *         线程安全的可变字符串。
     * 
     * StringBuffer和String的区别?
     * 前者长度和内容可变,后者不可变。
     * 如果使用前者做字符串的拼接,不会浪费太多的资源。
     * 
     * StringBuffer的构造方法:
     *        public StringBuffer():无参构造方法
     *        public StringBuffer(int capacity):指定容量的字符串缓冲区对象
     *        public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
     *
     * StringBuffer的方法:
     *        public int capacity():返回当前容量。    理论值
     *        public int length():返回长度(字符数)。 实际值
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            // public StringBuffer():无参构造方法
            StringBuffer sb = new StringBuffer();
            System.out.println("sb:" + sb);
            System.out.println("sb.capacity():" + sb.capacity());
            System.out.println("sb.length():" + sb.length());
            System.out.println("--------------------------");
    
            // public StringBuffer(int capacity):指定容量的字符串缓冲区对象
            StringBuffer sb2 = new StringBuffer(50);
            System.out.println("sb2:" + sb2);
            System.out.println("sb2.capacity():" + sb2.capacity());
            System.out.println("sb2.length():" + sb2.length());
            System.out.println("--------------------------");
    
            // public StringBuffer(String str):指定字符串内容的字符串缓冲区对象
            StringBuffer sb3 = new StringBuffer("hello");
            System.out.println("sb3:" + sb3);
            System.out.println("sb3.capacity():" + sb3.capacity());//16+5
            System.out.println("sb3.length():" + sb3.length());
        }
    }

    StringBuffer的添加功能:

    package cn.itcast_02;
    
    /*
     * StringBuffer的添加功能:
     * public StringBuffer append(String str):可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身
     * 
     * public StringBuffer insert(int offset,String str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            // 创建字符串缓冲区对象
            StringBuffer sb = new StringBuffer();
    
    //         public StringBuffer append(String str)
             StringBuffer sb2 = sb.append("hello");
             System.out.println("sb:" + sb);
             System.out.println("sb2:" + sb2);
             System.out.println(sb == sb2); // true
    
            // 一步一步的添加数据
            // sb.append("hello");
            // sb.append(true);
            // sb.append(12);
            // sb.append(34.56);
    
            // 链式编程
            sb.append("hello").append(true).append(12).append(34.56);
            System.out.println("sb:" + sb);
    
            // public StringBuffer insert(int offset,String
            // str):在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身
            sb.insert(5, "world");
            System.out.println("sb:" + sb);
        }
    }

    StringBuffer的删除功能

    package cn.itcast_03;
    
    /*
     * StringBuffer的删除功能
     * public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
     * public StringBuffer delete(int start,int end):删除从指定位置开始指定位置结束的内容,并返回本身
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            // 创建对象
            StringBuffer sb = new StringBuffer();
    
            // 添加功能
            sb.append("hello").append("world").append("java");
            System.out.println("sb:" + sb);
    
            // public StringBuffer deleteCharAt(int index):删除指定位置的字符,并返回本身
            // 需求:我要删除e这个字符,肿么办?
            // sb.deleteCharAt(1);
            // 需求:我要删除第一个l这个字符,肿么办?
            // sb.deleteCharAt(1);
    
            // public StringBuffer delete(int start,int
            // end):删除从指定位置开始指定位置结束的内容,并返回本身
            // 需求:我要删除world这个字符串,肿么办?
            // sb.delete(5, 10);
    
            // 需求:我要删除所有的数据
            sb.delete(0, sb.length());
    
            System.out.println("sb:" + sb);
        }
    }

    StringBuffer的替换功能:

    package cn.itcast_04;
    
    /*
     * StringBuffer的替换功能:
     * public StringBuffer replace(int start,int end,String str):从start开始到end用str替换
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            // 创建字符串缓冲区对象
            StringBuffer sb = new StringBuffer();
    
            // 添加数据
            sb.append("hello");
            sb.append("world");
            sb.append("java");
            System.out.println("sb:" + sb);
    
            // public StringBuffer replace(int start,int end,String
            // str):从start开始到end用str替换
            // 需求:我要把world这个数据替换为"节日快乐"
            sb.replace(5, 10, "节日快乐");
            System.out.println("sb:" + sb);
        }
    }

    StringBuffer的反转功能:

    package cn.itcast_05;
    
    /*
     * StringBuffer的反转功能:
     * public StringBuffer reverse()
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            // 创建字符串缓冲区对象
            StringBuffer sb = new StringBuffer();
    
            // 添加数据
            sb.append("霞青林爱我");
            System.out.println("sb:" + sb);
    
            // public StringBuffer reverse()
            sb.reverse();
            System.out.println("sb:" + sb);
        }
    }

    StringBuffer的截取功能

    package cn.itcast_06;
    
    /*
     * StringBuffer的截取功能:注意返回值类型不再是StringBuffer本身了
     * public String substring(int start)
     * public String substring(int start,int end)
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            // 创建字符串缓冲区对象
            StringBuffer sb = new StringBuffer();
    
            // 添加元素
            sb.append("hello").append("world").append("java");
            System.out.println("sb:" + sb);
    
            // 截取功能
            // public String substring(int start)
            String s = sb.substring(5);
            System.out.println("s:" + s);
            System.out.println("sb:" + sb);
    
            // public String substring(int start,int end)
            String ss = sb.substring(5, 10);
            System.out.println("ss:" + ss);
            System.out.println("sb:" + sb);
        }
    }

    String和StringBuffer的相互转换?

    package cn.itcast_07;
    
    /*
     * 为什么我们要讲解类之间的转换:
     * A -- B的转换
     * 我们把A转换为B,其实是为了使用B的功能。
     * B -- A的转换
     * 我们可能要的结果是A类型,所以还得转回来。
     * 
     * String和StringBuffer的相互转换?
     */
    public class StringBufferTest {
        public static void main(String[] args) {
            // String -- StringBuffer
            String s = "hello";
            // 注意:不能把字符串的值直接赋值给StringBuffer
            // StringBuffer sb = "hello";//这个写法错误
            // StringBuffer sb = s;
            // 方式1:通过构造方法
            StringBuffer sb = new StringBuffer(s);
            // 方式2:通过append()方法
            StringBuffer sb2 = new StringBuffer();
            sb2.append(s);
            System.out.println("sb:" + sb);
            System.out.println("sb2:" + sb2);
            System.out.println("---------------");
    
            // StringBuffer -- String
            StringBuffer buffer = new StringBuffer("java");
            // String(StringBuffer buffer)
            // 方式1:通过构造方法
            String str = new String(buffer);
            // 方式2:通过toString()方法
            String str2 = buffer.toString();
            System.out.println("str:" + str);
            System.out.println("str2:" + str2);
        }
    }

    使用StringBuffer把数组拼接成一个字符串

    package cn.itcast_07;
    
    /*
     * 把数组拼接成一个字符串
     */
    public class StringBufferTest2 {
        public static void main(String[] args) {
            // 定义一个数组
            int[] arr = { 44, 33, 55, 11, 22 };
    
            // 定义功能
            // 方式1:用String做拼接的方式
            String s1 = arrayToString(arr);
            System.out.println("s1:" + s1);
    
            // 方式2:用StringBuffer做拼接的方式
            String s2 = arrayToString2(arr);
            System.out.println("s2:" + s2);
        }
    
        // 用StringBuffer做拼接的方式
        public static String arrayToString2(int[] arr) {
            StringBuffer sb = new StringBuffer();
    
            sb.append("[");
            for (int x = 0; x < arr.length; x++) {
                if (x == arr.length - 1) {
                    sb.append(arr[x]);
                } else {
                    sb.append(arr[x]).append(", ");
                }
            }
            sb.append("]");
    
            return sb.toString();
        }
    
        // 用String做拼接的方式
        public static String arrayToString(int[] arr) {
            String s = "";
    
            s += "[";
            for (int x = 0; x < arr.length; x++) {
                if (x == arr.length - 1) {
                    s += arr[x];
                } else {
                    s += arr[x];
                    s += ", ";
                }
            }
            s += "]";
    
            return s;
        }
    }

    把字符串反转

    package cn.itcast_07;
    
    import java.util.Scanner;
    
    /*
     * 把字符串反转
     */
    public class StringBufferTest3 {
        public static void main(String[] args) {
            // 键盘录入数据
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入数据:");
            String s = sc.nextLine();
    
            // 方式1:用String做拼接
            String s1 = myReverse(s);
            System.out.println("s1:" + s1);
            // 方式2:用StringBuffer的reverse()功能
            String s2 = myReverse2(s);
            System.out.println("s2:" + s2);
        }
    
        // 用StringBuffer的reverse()功能
        public static String myReverse2(String s) {
    
            return new StringBuffer(s).reverse().toString();
        }
    
        // 用String做拼接
        public static String myReverse(String s) {
            String result = "";
    
            char[] chs = s.toCharArray();
            for (int x = chs.length - 1; x >= 0; x--) {
                result += chs[x];
            }
    
            return result;
        }
    }

    判断一个字符串是否是对称字符串

    package cn.itcast_07;
    
    import java.util.Scanner;
    
    /*
     * 判断一个字符串是否是对称字符串
     * 例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串
     * 
     * 分析:
     *         判断一个字符串是否是对称的字符串,我只需要把
     *             第一个和最后一个比较
     *             第二个和倒数第二个比较
     *             ...
     *         比较的次数是长度除以2。
     */
    public class StringBufferTest4 {
        public static void main(String[] args) {
            // 创建键盘录入对象
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串:");
            String s = sc.nextLine();
    
            // 一个一个的比较
            boolean b = isSame(s);
            System.out.println("b:" + b);
            
            //用字符串缓冲区的反转功能
            boolean b2 = isSame2(s);
            System.out.println("b2:"+b2);
        }
        
        //用字符串缓冲区的反转功能
        public static boolean isSame2(String s) {
            return new StringBuffer(s).reverse().toString().equals(s);
        }
        
        // 一个一个的比较
        public static boolean isSame(String s) {
            boolean flag = true;
    
            // 把字符串转成字符数组
            char[] chs = s.toCharArray();
    
            for (int start = 0, end = chs.length - 1; start <= end; start++, end--) {
                if (chs[start] != chs[end]) {
                    flag = false;
                    break;
                }
            }
    
            return flag;
        }
    }

     String,StringBuffer,StringBuilder的区别?

    package cn.itcast_08;
    
    /*
     * 面试题:
     * 1:String,StringBuffer,StringBuilder的区别?
     * A:String是内容不可变的,而StringBuffer,StringBuilder都是内容可变的。
     * B:StringBuffer是同步的,数据安全,效率低;StringBuilder是不同步的,数据不安全,效率高
     * 
     * 2:StringBuffer和数组的区别?
     * 二者都可以看出是一个容器,装其他的数据。
     * 但是呢,StringBuffer的数据最终是一个字符串数据。
     * 而数组可以放置多种数据,但必须是同一种数据类型的。
     * 
     * 3:形式参数问题
     * String作为参数传递
     * StringBuffer作为参数传递 
     * 
     * 形式参数:
     *         基本类型:形式参数的改变不影响实际参数
     *         引用类型:形式参数的改变直接影响实际参数
     * 
     * 注意:
     *         String作为参数传递,效果和基本类型作为参数传递是一样的。虽然String是特殊的引用类型,但是可以看成基本类型
     */
    public class StringBufferDemo {
        public static void main(String[] args) {
            String s1 = "hello";
            String s2 = "world";
            System.out.println(s1 + "---" + s2);// hello---world
            change(s1, s2);
            System.out.println(s1 + "---" + s2);// hello---world
    
            StringBuffer sb1 = new StringBuffer("hello");
            StringBuffer sb2 = new StringBuffer("world");
            System.out.println(sb1 + "---" + sb2);// hello---world
            change(sb1, sb2);
            System.out.println(sb1 + "---" + sb2);// hello---worldworld
    
        }
    
        public static void change(StringBuffer sb1, StringBuffer sb2) {
            sb1 = sb2;//直接赋值不会改变外面的sb1
            sb2.append(sb1);//作操作会改变
        }
    
        public static void change(String s1, String s2) {
            s1 = s2;
            s2 = s1 + s2;
        }
    }
  • 相关阅读:
    winform+c#之窗体之间的传值 Virus
    ASP.NET 2.0 利用 checkbox获得选中行的行号, 在footer中显示 Virus
    .NET中的winform的listview控件 Virus
    我的书橱
    Expert .NET 2.0 IL Assembler·译者序一 写在一稿完成之即
    Verbal Description of Custom Attribute Value
    AddressOfCallBacks in TLS
    下一阶段Schedule
    2008 Oct MVP OpenDay 第二天 博客园聚会
    2008 Oct MVP OpenDay 第二天 颁奖·讲座·晚会
  • 原文地址:https://www.cnblogs.com/baiyangyuanzi/p/6857267.html
Copyright © 2011-2022 走看看