常用类--StringBuffer类--String和StringBuffer的相互转换、字符串反转案例、面试题、String与StringBuffer传参图解...

String和StringBuffer的相互转换

/*
        String和StringBuffer的相互转换
        A--B,将A转换成B,是为了使用B中特有功能
        B--A,再将B转换成A,可能是引用最终的结果需要A类型,所以还得转换回来
*/
public class StringBufferDemo7 {
    public static void main(String[] args) {
      
        //String ---> StringBuffer
        String s = "hello";
      
//      不兼容的类型: java.lang.String无法转换为java.lang.StringBuffer
//      StringBuffer sb1 = s;
//      StringBuffer sb1 = "hello";
      
        //方式1:通过构造方法转换
        StringBuffer sb1 = new StringBuffer(s);
        System.out.println(s);//hello
        System.out.println(sb1);//hello
      
        //方式2:通过append方法
        StringBuffer sb2 = new StringBuffer();
        sb2.append(s);
        System.out.println(s);//hello
        System.out.println(sb2);//hello

      
        //StringBuffer ---> String
        StringBuffer sb3 = new StringBuffer("bigdata");
      
        //方式1:使用StringBuffer中的toString()方法
        //public String toString()
        String s1 = sb3.toString();
        System.out.println(s1);//bigdata
        System.out.println(sb3);//bigdata
      
        //方式2:substring()
        String s2 = sb3.substring(0);
        System.out.println(s2);//bigdata
        System.out.println(sb3);//bigdata
      
        //方式3:String的构造方法,
        //String(StringBuffer buffer)
        //分配一个新的字符串,其中包含当前包含在字符串缓冲区参数中的字符序列。
        String s3 = new String(sb3);
        System.out.println(s3);//bigdata
        System.out.println(sb3);//bigdata
    }
}
/*
        把数组拼接成一个字符串(用StringBuffer实现)
*/

public class StringBufferDemo8 {
    public static void main(String[] args) {
      //用什么类型的数组都可以,因为将来我append()的时候,把这些类型都转成了字符串类型进行拼接
        char[] chars = {'a','b','c','d'};
        //创建一个空的StringBuffer对象
        StringBuffer sb = new StringBuffer();

        //遍历数组获取到每一个字符
        for(int i=0;i<chars.length;i++){
            sb.append(chars[i]);
        }
      
        //将StringBuffer转换成字符串
        String s = sb.toString();
        System.out.println(s);
    }
}

字符串反转案例

/*
        把字符串反转 (键盘录入字符串)
        "qwerdf"    "fdrewq"
*/

import java.util.Scanner;
public class StringBufferDemo9 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String stringLine = sc.next();

      
        //方式1:使用String的方式
      
        //定义一个空的字符串,用于接收遍历的结果
        String s = "";
        //将输入的字符串转成字符数组
        char[] chars = stringLine.toCharArray();
        //倒着遍历字符数组
        for (int i = chars.length - 1; i >= 0; i--) {
            s += chars[i];
        }
        System.out.println(stringLine + "反转之后的字符串为:" + s);

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

        //方式2:利用StringBuffer中的reverse()方法实现反转
      
        //将输入的字符串转换成StringBuffer类型
        StringBuffer sb = new StringBuffer(stringLine);
        //调用StringBuffer中的reverse()方法
        sb.reverse();
        String s2 = sb.toString();
        System.out.println(stringLine + "反转之后的字符串为:" + s2);
      
        System.out.println("链式编程:");
        System.out.println(stringLine + "反转之后的字符串为:" + new StringBuffer(stringLine).reverse().toString());
    }
}
/*
        判断一个键盘录入的字符串是否是对称字符串
        例如"abc"不是对称字符串,"aba"、"abba"、"aaa"、"mnanm"是对称字符串

        分析:
            1、第1个字符与最后一个字符进行比较
            2、第2个字符与倒数第2个字符进行比较
            3、...

            比较的次数:字符串的长度(length())/2
*/

import java.util.Scanner;
public class StringBufferDemo10 {
    public static void main(String[] args) {
        //创建键盘录入对象
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入您想要判断的字符串:");
        String stringLine = sc.next();

        //方式1:一个一个的去比较
        //将字符串转换成字符数组
        char[] chars = stringLine.toCharArray();
        boolean flag = true;
        for(int start=0,end=chars.length-1;start<=end;start++,end--){
            if(chars[start]!=chars[end]){
                System.out.println("该字符串不是对称字符串!");
                flag = false;
                break;
            }
        }
        if(flag){
            System.out.println("该字符串是对称字符串!");
        }

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

        //方式2:利用StringBuffer中reverse()方法,将反转后与反转前进行比较
        //将输入的字符串转换成StringBuffer类型
        StringBuffer sb = new StringBuffer(stringLine);
        StringBuffer reverse = sb.reverse();
        //再将反转后的StringBuffer类型转换回String类型
        String s = reverse.toString();
        if(s.equals(stringLine)){
            System.out.println("该字符串是对称字符串!");
        }else {
            System.out.println("该字符串不是对称字符串!");
        }
    }
}

面试题

/*
        面试题1 :String,StringBuffer,StringBuilder之间的区别
            1、StringBuffer是线程同步安全的,数据安全,效率低
               StringBuilder不是线程同步安全的,数据不安全,效率高
            2、String的内容是不可变的,StringBuffer和StringBuilder是可变的
            3、StringBuffer中的方法是由synchronized关键字修饰的。用来保证线程是否安全。

        面试题2:StringBuffer和数组的区别?
            它们都可以被看作是一个容器,装一些数据。
            但是呢,StringBuffer里面的数据都是一个一个的字符
            数组可以存放不同数据类型的数据,但是同一个数组只能存放同一种数据类型的数据

        看程序写结果:
            探究String与StringBuffer分别作为方法的参数传递的区别
*/

public class StringBufferDemo11 {
    public static void main(String[] args) {
//      StringBuffer和StringBuilder的用法一模一样
//      
//        StringBuffer sb = new StringBuffer();
//        sb.append("hello");
//        System.out.println(sb);//hello
//
//        StringBuilder sb2 = new StringBuilder();
//        sb2.append("world");
//        System.out.println(sb2);//world

        String s1 = "hello";
        String s2 = "world";
        System.out.println("s1: " + s1+" ,s2:" + s2); //s1:hello ,s2:world
        change(s1,s2);
        System.out.println("s1: " + s1+" ,s2:" + s2); //s1:hello ,s2:world

        System.out.println("*******************************************");
        StringBuffer sb1 = new StringBuffer("hello");
        StringBuffer sb2 = new StringBuffer("world");
        System.out.println("sb1: " + sb1+" ,sb2:" + sb2);//s1:hello ,s2:world
        change(sb1,sb2);
        System.out.println("sb1: " + sb1+" ,sb2:" + sb2);//sb1: hello ,sb2:worldworld
        
    }
    private static void change(String s1, String s2) {//只是将来传进来的实参赋给了方法声明上定义的形参
        s1 = s2; //s1:"world"
        s2 = s1 + s2; //s2:"worldworld"
        System.out.println("s1: " + s1+" ,s2:" + s2);//s1:world ,s2:worldworld
    }
  
    private static void change(StringBuffer sb1,StringBuffer sb2){
        sb1 = sb2;
        sb2.append(sb1);
        System.out.println("sb1: " + sb1+" ,sb2:" + sb2);//sb1: worldworld ,sb2:worldworld
    }
}

String作为方法参数传递的图解

 StringBuffer作为方法参数传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值