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;
        }
    }
  • 相关阅读:
    天文望远镜(二)
    天文望远镜(一)
    安静
    JavaScript 私有类字段和 TypeScript 私有修饰符
    js解析剪切板里的excel内容
    js正则
    jquery扩展方法:实现模拟Marquee无限循环滚动
    js中onload和ready区别
    Js如何从字符串中提取数字?
    JSBridge 初探
  • 原文地址:https://www.cnblogs.com/baiyangyuanzi/p/6857267.html
Copyright © 2011-2022 走看看