Java String类

目录

StringBuilder

StringBuilder是什么

StringBuilder构造方法 

StringBuilder常用方法

StringJoiner

 StringJoiner是什么?

StringJoiner构造方法

StringJoiner的成员方法


StringBuilder

有String不就行了吗?我们学StringBuilder干嘛?

来看下面这个例子:

public class Main{
    public static void main(String[] args) {
        String s = "";//创建一个空的字符串 底层new了一个空间
        for(int i =0;i<1000000;i++){
            s = s+ "abc";
        }
        System.out.println(s);
        
    }
}

这段代码要等很久很久 因为由于字符串是不可变的,所以每次执行s = s + "abc"这条指令的时候,都需要创建一个新的s 来存放 这样导致效率极低,因此时间很久.

而StringBuilder就是来解决上述的这种问题的. 下面是用StringBuilder的例子:

public class Main{
    public static void main(String[] args) {
       StringBuilder sb = new StringBuilder("");
       for(int i =0;i<10000000;i++){
           sb.append("abc");
       }
        System.out.println(sb);

    }
}

这段代码的运行速度就相当快了 , 至于为什么?我们接着往下看.

StringBuilder是什么

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

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

如下图:

字符串放置在容器中即可改变而无需一直创建(new String(...))新的对象

这也就是为什么上面那个例子中第二个代码的运行效率快的原因了

那么StringBuilder如何构造呢?

StringBuilder构造方法 

方法名说明

public   StringBuilder()         

创建一个空白可变的字符串对象,不含有任何内容

public   StringBuilder(Stringstr)               

根据字符串的内容,来创建可变字符串对象

 由于上面写的是空参的构造StringBuilder的方法

那么这里就来说明一下有参的 :

StringBuilder sb = new StringBuilder("abc"); 

这个代码的意思是在一个StringBuilder对象在创建时已存放了一个字符串"abc"

说完了构造方法,我们来说一下StringBuilder中有那些常用的方法

StringBuilder常用方法

方法名说明
public StringBuilder append(任意类型)     添加数据,并返回对象本身
public StringBuilder reverse()反转容器中的内容
public int length()返回长度(字符出现的个数)
public String toString通过toString()就可以实现把StringBuilder转换为String

public class Main{
    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);
    }
}
public class Main{
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("aaa");
        sb.append("bbb");
        sb.append("ccc");
        sb.append("ddd");

        System.out.println(sb);

        //再把StringBuilder变回字符串
        String str = sb.toString();
        System.out.println(str);
    }
}

这样多行可能有点复杂,如果使用熟练后, 可以用链式编程的思想来进行书写

何为链式编程?就是当我们调用一个方法的时候,不需要用变量接受ta的结果,可以继续调用其他的方法.

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        int len = getString().
                substring(1).
                replace("A","Q").length();
    }
    public static String getString(){
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        return str;
    }
}

做两个练习来看看自己的StringBuilder这部分的知识点,掌握的怎么样叭!

练习一:对称字符串

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

例如:  堆成字符串   123321  111   非对称字符串: 123123

import java.util.Scanner;

public class Main{
    public static void main(String[] args) {
        //输入一个字符串
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        //将这个字符串放在StringBuilder中然后进行翻转看看是否跟原来的相等即可
        StringBuilder sb = new StringBuilder(str);
        StringBuilder reverse = sb.reverse();
        String string = reverse.toString();
        if(string.equals(str)){
            System.out.println("这是一个对称字符串捏!");
        }else{
            System.out.println("是一个非对称字符串啊!");
        }
        /*
        也可以用链式编程思想:
        String result = new StringBuilder().append(str).reverse().toString();
        if(str.equals(result)){
            ...
        }else{
            ...
        }

         */
    }
}

练习二:按要求打印

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

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

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

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

public class Main{
    public static void main(String[] args) {
        //1.定义一个数组
        int[] arr = {1,2,3};
        
        //2.调用方法把数组变成字符串
        String str = arrToString(arr);

        System.out.println(str);
    }

    private 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]+",");
            }
        }
        sb.append("]");

        return sb.toString();
    }
}

但其实这个练习可以做的更快,更优雅!也就是我们下面要将的StringJoiner .

StringJoiner

如果我们学会了StringJoiner就可以将上面的练习写成这样:

 StringJoiner是什么?

StringJoiner是Java8新出的用于处理字符串拼接的工具类,可以让你的代码看起来更优雅,不拉跨。

StringJoiner构造方法

     方法名                                                         

                                             说明
public StringJoiner(间隔符号)创建一个StringJoiner对象,指定拼接时的间隔符号
public StringJoiner(间隔符号,开始  符号,结束符号)创建一个StringJoiner对象,指定拼接时的间隔符号,开始符号,结束符号

 

StringJoiner的成员方法

方法名说明
public StringJoiner add(添加的内容)添加数据,并返回对象本身
public iunt length()返回长度(字符出现的个数)
public String toString()返回一个字符串(该字符串就是拼接后的结果)

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

  • 28
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值