Java知识【StringBuilder和StringJoiner】

举报
爱吃豆的土豆 发表于 2022/09/25 07:40:27 2022/09/25
【摘要】 目录 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:基本使用


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

1.2:链式编程


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

1.3:练习1:对称字符串

需求:

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

对称字符串:123321、111

非对称字符串:123123

 

代码示例:


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

 

1.4:练习2:拼接字符串

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

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

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

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

代码示例:


  
  1. public class StringBuilderDemo7 {
  2. public static void main(String[] args) {
  3. //1.定义数组
  4. int[] arr = {1,2,3};
  5. //2.调用方法把数组变成字符串
  6. String str = arrToString(arr);
  7. System.out.println(str);
  8. }
  9. public static String arrToString(int[] arr){
  10. StringBuilder sb = new StringBuilder();
  11. sb.append("[");
  12. for (int i = 0; i < arr.length; i++) {
  13. if(i == arr.length - 1){
  14. sb.append(arr[i]);
  15. }else{
  16. sb.append(arr[i]).append(", ");
  17. }
  18. }
  19. sb.append("]");
  20. return sb.toString();
  21. }
  22. }

2,StringJoiner

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

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

  • JDK8出现的

  • 基本使用:

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

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

全部回复

上滑加载中

设置昵称

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

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

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