字符串的三个相关类:String、StringBuilder、StringJoiner

StringBuilder

StringBuilder可看作是一个容器,创建之后里面的内容是可变的。

作用:提高字符串的操作效率

public class StringBuilderDemo {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder();
        //打印:
        //因为StringBuilder是Java已经写好的类
        //Java在底层对他做了一些特殊处理
        //打印对象不是地址值而是属性值
        //所以打印结果为空
        System.out.println(sb);
​
        StringBuilder sb1 = new StringBuilder("a");
        System.out.println(sb1);
        //2.添加数据
        sb1.append(1);
        sb1.append(2.3);
        sb1.append("lll");
        sb1.append(true);
        sb1.append('黑');
        System.out.println(sb1);//a12.3llltrue黑
​
        //3.反转reverse
        StringBuilder sb2 = new StringBuilder("abc");
        sb2.reverse();
        System.out.println(sb2);//cba
​
        //4.获取长度length()
        System.out.println(sb2.length());//3
​
        //5.用toString把StringBuilder变回字符串
        StringBuilder sb3 = new StringBuilder();
        sb3.append("aaa");
        sb3.append("bbb");
        sb3.append("ccc");
        sb3.append("ddd");
        System.out.println(sb3);//aaabbbcccddd
        //sb3只是一个容器,是对字符串进行操作的工具,用toString把StringBuilder变回字符串
        String str = sb3.toString();
        System.out.println(str);//aaabbbcccddd
​
​
    }
}
/**
 * ClassName:StringBuilderDemo1
 * Description:
 *    从键盘输入一个字符串,判断字符串是否对称
 */
public class StringBuilderDemo1 {
    public static void main(String[] args) {
        //从键盘输入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
​
        //反转字符串
        StringBuilder sb = new StringBuilder();
        String str1 = sb.append(str).reverse().toString();
        if(str.equals(str1)){
            System.out.println("当前字符串是对称字符串 ");
        }else {
            System.out.println("当前字符串不是对称字符串 ");
        }
    }
}

使用StringBuilder的场景:

  1. 字符串的拼接

  2. 字符串的反转

练习:

/**
 * ClassName:StringBuilderDemo12
 * Description:
 *
 *  定义一个方法,把int数组中的数据按照指定格式拼接成一个字符串
 *  调用该方法,并从控制台输出结果
 *  例如:数组为 int[] arr = {1,2,3};
 *  执行方法后的输出结果为:[1,2,3]
 *  
 * @version 1.0
 * @Author wang
 */
public class StringBuilderDemo12 {
    public static void main(String[] args) {
        //1.定义数组
        int[] arr = {1,2,3};
        //2.调用方法把数组变成字符串
        String str = arrToString(arr);
        System.out.println(str);
​
    }
​
    public static String arrToString(int[] a) {
        StringBuilder sb =new StringBuilder();
        sb.append("[");
        for (int i = 0; i < a.length; i++) {
             if (i == a.length-1){
                 sb.append(a[i]);
             }else {
                 sb.append(a[i]).append(",");
             }
        }
        sb.append("]");
        return sb.toString();
    }
}

StringJoiner

StringJoiner与StringBuilder一样,也可看作是一个容器,创建之后里面的内容是可变的。

public class StringJoinerDemo {
    public static void main(String[] args) {
        //1.创建对象
        StringJoiner sj = new StringJoiner("----");
        //2.添加元素
        sj.add("1").add("2").add("3");
        //打印
        System.out.println(sj);//1----2----3
​
        //1.创建对象
        StringJoiner sj2 = new StringJoiner(",", "[", "]");
        //2.添加元素
        sj2.add("aaa").add("bbb").add("ccc");
        //打印
        System.out.println(sj2);//[aaa,bbb,ccc]
​
        //长度
        int length = sj2.length();
        System.out.println(length);
​
        //toString
        String str = sj2.toString();
        System.out.println(str);//[aaa,bbb,ccc]

​
    }
}

 

字符串原理

1、字符串存储的内存原理
  • 直接赋值会复用字符串常量池中的

  • new出来的不会复用,而是开辟一个新的空间

2、==号比较多的到底是什么
  • 基本数据类型比较数据值

  • 引用数据类型比较地址值

3、字符串拼接的底层原理
  • 如果没有变量参与,都是字符串直接相加,编译之后就是拼接之后的结果,会复用串池中的字符串。

  • 如果有变量参与,每一行拼接的代码,都会在内存中创建新的字符串,浪费内存。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值