2021-05-27StringBuffer

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


 * 一个类似于 String 的字符串缓冲区,但不能修改

 StringBuffer是一个可变的字符序列
 *
 *  StringBuilder:jdk5以后提供的单线程程序中去替代StringBuffer使用的,不同步,执行效率高
 *  与StringBuffer有兼容的API(所有的功能都相同)
 *
 *  StringBuffer的构造方法:
 *      public StringBuffer():空参构造,创建一个空参的字符串缓冲区对象,16个初始容量字符 (默认容量足够大)
 *      public StringBuffer(String str):构造一个字符串缓冲对象,并且为其声明一个字符序列 str
 *
 *
 *
 *      public StringBuffer(int capacity):构造一个字符串缓冲区对象,指定初始容量


 *
 *
 *  获取功能

:
 *          int length():获取缓冲区中的字符长度
 *          public int capacity():获取字符串缓冲区中的容量

StringBuilder用来替换StringBuffer
 * String s1  = "world" ;
 *      "hello"+s1 ;---->使用反编译工具:new StringBuilder().append("hello").append(s1) ;
 *
 * StringBuffer的添加功能:
 *
 *          StringBuffer append(任何数据类型):将指定的内容追加到字符串缓冲区中,返回字符串缓冲区本身
 *
 *          public StringBuffer insert(int offset,String str)
 *              可以将任意类型元素插入到指定位置处
 *
 *
 *    删除功能:
 *          public StringBuffer deleteCharAt(int index):删除指定索引出的字符序列
 *          public StringBuffer delete(int start,int end):
 *          删除从指定位置开始到指定位置结束的字符序列,但是不包含end,包含的end-1的位置

 StringBuffer的反转功能


 * public StringBuffer reverse()

public class StringBufferDemo3 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in) ;

        System.out.println("请输入 一个字符串:");
        String line = sc.nextLine() ;

        //反转--->StringBuffer
        StringBuffer buffer = new StringBuffer(line) ;
        buffer.reverse() ;

        //在将StringBuffer--->String
        String s = buffer.toString();
        System.out.println(s);

    }
}

 在实际开发中,经常需要将A类型转换成B类型,因为我可能需要使用B类中的功能!
 * 但是,有的时候就将B类型--->A类型,结果最终可能需要A类型!
 *
 * String<---->StringBuffer:如何转换
 *
 *
 *
 * StringBuffer的截取功能:
 *      返回被截取的内容!
 * public String substring(int start):从指定位置开始截取到末尾,返回一个新的字符串
 * public String substring(int start,int end):从指定为值到end-1位置,返回值一个新的字符串

public class StringBufferDemo4 {
    public static void main(String[] args) {
        //String--->StringBuffer
        String s = "hello" ;
        //定义StringBuffer类型变量
//        StringBuffer sb = s ; //类型不匹配
        //方式1:StringBuffer的构造方法(String str)
        StringBuffer sb = new StringBuffer(s) ;
        System.out.println(sb);

        System.out.println("-----------------------");
        //方式2:使用StringBuffer的空参构造,+append(元素)
        StringBuffer sb2 = new StringBuffer() ;
        sb2.append(s) ;
        System.out.println(sb2);

        System.out.println("--------------------------------------");

        //StringBuffer--->String
        //String的构造方法:public String(StringBuffer buffer)
        StringBuffer buffer = new StringBuffer("javaee") ;//类型为StringBuffer类型
        String str = new String(buffer) ;
        System.out.println(str);//String
        System.out.println("----------------------");
        //方式2:
        //public String toString()
        String str2 = buffer.toString();
        System.out.println(str2);
        System.out.println("----------------------");

        StringBuffer sb3 = new StringBuffer() ;
        sb3.append("hello") ;
        sb3.append("android") ;
        sb3.append("Javaee") ;
      /*  String substring = sb3.substring(5);*/
        String substring = sb3.substring(5,10) ;
        System.out.println(substring);


    }
}

   StringBuffer和String 作为方法的形式参数有什么区别?
 *      方法的形式参数:基本类型
 *                              形参的改变不影响实际参数
 *
 *                      引用类型
 *                              形参的改变直接影响实际参数
 *
 *                              String也是引用类型(特殊的引用类型),特点:是一个常量,一旦被创建,其值不能被更改  String s ="abc" ;
 *                                  String类型作为形式参数,效果和基本类型一致!
 *
 *     从概念上讲:
 *              StringBuffer:可变的字符序列 (线程安全的类)
 *              String::是一个常量,一旦被创建,其值不能被更改

键盘录入字符串,统计字符串中大写字母字符,数字字符,小写字母的出现个数(不考虑其他字符)
 *              举例:
 *                      输入"helloworld123JavaEE"
 *
 *                      输出:  大写字母字符: 3个
 *                             小写字母字符:13个
 *                             数字字符:3个
 *
 *   分析:
 *      0)定义三个变量:
 *              小写字母统计
 *              大写字母统计
 *              数字字符统计
 *      1)键盘录入值
 *      2)将字符串--遍历----toCharArry() --->字符数组
 *
 *      3)获取到每一个字符
 *              当前字符 'a'  'z' ---> 小写字母字符
 *              当前字符 'A'  'Z'  --->大写字母字符
 *              当前字符 '0'   '9' --->数字字符
 *
 *
 *
 *
 *              学习了Character类的判断
 *              改造这个需求
 *                   public static boolean isDigit(char ch):判断这个ch字符是否为数字
 *  *               public static boolean isLowerCase(char ch):判断这个ch字符是否为小写字母字符
 *  *               public static boolean isUpperCase(char ch):判断这个ch字符是否为答谢字母字符

public class Test {
    public static void main(String[] args) {

        //定义三个统计变量
        int bigCount = 0 ;
        int smallCount = 0 ;
        int numberCount = 0 ;

        Scanner sc = new Scanner(System.in) ;
        //提示
        System.out.println("请你输入一个字符串(包含大小写以及数字): ");
        String line =sc.nextLine() ;

        //转换
        char[] charArray = line.toCharArray();
        for (int i = 0; i <charArray.length ; i++) {
            //获取到每一个字符
            char ch = charArray[i] ;

                //判断
                if(ch>= 'a' && ch <='z'){
                    smallCount ++ ;
                }else if(ch >= 'A'  && ch <= 'Z'){
                bigCount ++;
            }else if(ch >= '0' && ch<='9'){
                numberCount ++ ;
            }else{
                System.out.println("对不起,不提供这个字符统计");
            }
        }
        System.out.println("大写字母字符有:"+bigCount+"个");
        System.out.println("小写字母字符有:"+smallCount+"个");
        System.out.println("数字字符:"+numberCount+"个");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值