Java知识【StringBuilder和StringJoiner】

举报
爱吃豆的土豆 发表于 2022/09/25 07:40:27 2022/09/25
2.4k+ 0 0
【摘要】 目录 1,StringBuilder 1.1:基本使用 1.2:链式编程 1.3:练习1:对称字符串 1.4:练习2:拼接字符串 2,StringJoiner 2.1:关于字符串的小拓展: 1,StringBuilder StringBuilder 可以看成是一个容器,创建之后里面的内容是可变的。 当我们在拼接...

目录

1,StringBuilder

1.1:基本使用

1.2:链式编程

1.3:练习1:对称字符串

1.4:练习2:拼接字符串

2,StringJoiner

2.1:关于字符串的小拓展:


1,StringBuilder

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

当我们在拼接字符串和反转字符串的时候会使用到

1.1:基本使用


      public class StringBuilderDemo3 {
         public static void main(String[] args) {
             //1.创建对象
             StringBuilder sb = new StringBuilder("abc");
             //2.添加元素
             /*sb.append(1);
       sb.append(2.3);
       sb.append(true);*/
             //反转
              sb.reverse();
             //获取长度
             int len = sb.length();
              System.out.println(len);
             //打印
             //普及:
             //因为StringBuilder是Java已经写好的类
             //java在底层对他做了一些特殊处理。
             //打印对象不是地址值而是属性值。
              System.out.println(sb);
          }
      }
  
 

1.2:链式编程


      public class StringBuilderDemo4 {
         public static void main(String[] args) {
             //1.创建对象
             StringBuilder sb = new StringBuilder();
             //2.添加字符串
              sb.append("aaa").append("bbb").append("ccc").append("ddd");
              System.out.println(sb);//aaabbbcccddd
             //3.再把StringBuilder变回字符串
             String str = sb.toString();
              System.out.println(str);//aaabbbcccddd
          }
      }
  
 

1.3:练习1:对称字符串

需求:

键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是

对称字符串:123321、111

非对称字符串:123123

代码示例:


      public class StringBuilderDemo6 {
         //使用StringBuilder的场景:
         //1.字符串的拼接
         //2.字符串的反转
         public static void main(String[] args) {
             //1.键盘录入一个字符串
             Scanner sc = new Scanner(System.in);
              System.out.println("请输入一个字符串");
             String str = sc.next();
             //2.反转键盘录入的字符串
             String result = new StringBuilder().append(str).reverse().toString();
             //3.比较
             if(str.equals(result)){
                  System.out.println("当前字符串是对称字符串");
              }else{
                  System.out.println("当前字符串不是对称字符串");
              }
          }
      }
  
 

1.4:练习2:拼接字符串

需求:定义一个方法,把 int 数组中的数据按照指定的格式拼接成一个字符串返回。

调用该方法,并在控制台输出结果。

例如:数组为int[] arr = {1,2,3};

执行方法后的输出结果为:[1, 2, 3]

代码示例:


      public class StringBuilderDemo7 {
         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[] arr){
             StringBuilder sb = new StringBuilder();
              sb.append("[");
             for (int i = 0; i < arr.length; i++) {
                 if(i == arr.length - 1){
                      sb.append(arr[i]);
                  }else{
                      sb.append(arr[i]).append(", ");
                  }
              }
              sb.append("]");
             return sb.toString();
          }
      }
  
 

2,StringJoiner

  • StringJoiner跟StringBuilder一样,也可以看成是一个容器,创建之后里面的内容是可变的。

  • 作用:提高字符串的操作效率,而且代码编写特别简洁,但是目前市场上很少有人用。

  • JDK8出现的

  • 基本使用:

    
            //1.创建一个对象,并指定中间的间隔符号
            StringJoiner sj = new StringJoiner("---");
            //2.添加元素
            sj.add("aaa").add("bbb").add("ccc");
            //3.打印结果
            System.out.println(sj);//aaa---bbb---ccc
        
       
    
            //1.创建对象
            StringJoiner sj = new StringJoiner(", ","[","]");
            //2.添加元素
            sj.add("aaa").add("bbb").add("ccc");
            int len = sj.length();
            System.out.println(len);//15
            //3.打印
            System.out.println(sj);//[aaa, bbb, ccc]
            String str = sj.toString();
            System.out.println(str);//[aaa, bbb, ccc]
        
       

2.1:关于字符串的小拓展:

  1. 字符串存储的内存原理

    String s = “abc”;直接赋值

    特点:

    此时字符串abc是存在字符串常量池中的。

    先检查字符串常量池中有没有字符串abc,如果有,不会创建新的,而是直接复用。如果没有abc,才会创建一个新的。

    所以,直接赋值的方式,代码简单,而且节约内存。

  2. new出来的字符串

    看到new关键字,一定是在堆里面开辟了一个小空间。

    String s1 = new String(“abc”);

    String s2 = “abc”;

    s1记录的是new出来的,在堆里面的地址值。

    s2是直接赋值的,所以记录的是字符串常量池中的地址值。

  3. ==号比较的到底是什么?

    如果比较的是基本数据类型:比的是具体的数值是否相等。

    如果比较的是引用数据类型:比的是地址值是否相等。

    结论:==只能用于比较基本数据类型。不能比较引用数据类型。

文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。

原文链接:qianxu.blog.csdn.net/article/details/127011402

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。