Java知识【StringBuilder和StringJoiner】
目录
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:关于字符串的小拓展:
-  
字符串存储的内存原理
String s = “abc”;直接赋值
特点:
此时字符串abc是存在字符串常量池中的。
先检查字符串常量池中有没有字符串abc,如果有,不会创建新的,而是直接复用。如果没有abc,才会创建一个新的。
所以,直接赋值的方式,代码简单,而且节约内存。
 -  
new出来的字符串
看到new关键字,一定是在堆里面开辟了一个小空间。
String s1 = new String(“abc”);
String s2 = “abc”;
s1记录的是new出来的,在堆里面的地址值。
s2是直接赋值的,所以记录的是字符串常量池中的地址值。
 -  
==号比较的到底是什么?
如果比较的是基本数据类型:比的是具体的数值是否相等。
如果比较的是引用数据类型:比的是地址值是否相等。
结论:==只能用于比较基本数据类型。不能比较引用数据类型。
 
文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。
原文链接:qianxu.blog.csdn.net/article/details/127011402
- 点赞
 - 收藏
 - 关注作者
 
            
           
评论(0)