Java的字符串(下)

案例.敏感词替换

在这里插入图片描述

public class StringTest7 {
    public static void main(String[] args) {
        String[] talk = {"TMD","CNM","SB"};
        String arr = "TMD,CNM,SB去食";
        for (int i = 0; i < talk.length; i++) {

          arr = arr.replace(talk[i],"*******" );
        }
        System.out.println(arr);
    }
}

运行结果:,,*******去食

Stringbulider

在这里插入图片描述
Stringbuilder概述
Stringbuilder 可以看作一个容器,创建之后里面的内容是可变的
作用:提高字符串的操作效率
Stringbuilder构造方法
在这里插入图片描述

StringBuilder sb = new StringBuilder("abc");

StringBuilder的对象------abc
Stringbuilder的常用方法
在这里插入图片描述
public StringBuilder appened(任意类型添加数据):添加数据
public StringBuilder reverse():反转数据内容
public int length():返回长度
public String toString()通过toString()就可以实现把StringBuilder转换为String
sout(sb)打印的属性值不是地址值

StringBuilder的基本应用

1.创建对象
2.添加字符串
3.再把Stringbuilder变回字符串
//链式编程
//当我们在调用一个方法的时候,不需要用变量接受的时候,可以继续调用其他方法
链式编程的演示代码

int len = getString().substring(1).replace(A,Q).length();
System.outprintln(len);

链式编程案例:

public class StringTest8 {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("lss").append(" ").append("love").append(" ").append("tjk");
        System.out.println(sb);
    }
}

运行结果:
lss love tjk

练习.对称字符串

使用StringBuilder的使用场景
//1.字符串的拼接
//2.字符串的反转
在这里插入图片描述

import java.util.Scanner;

public class StringTest8 {
    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("该字符串不是对称字符串");
        }
    }
}

运行结果1:
请输入一个字符串:
123
该字符串不是对称字符串
运行结果2:
请输入一个字符串:
123321
该字符串是对称字符串

练习.拼接字符串

在这里插入图片描述
//1.定义数组
//2.调用方法把数组转换为字符串

import javax.swing.*;

public class StringTest9 {
    public static void main(String[] args) {
         int[] arr = {1,2,3};
        String newarr = fun(arr);
        System.out.println(newarr);
    }
    public static String fun(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();
    }
}

运行结果:
[1, 2, 3]

StringJoiner

为什么学习StringJoiner:速度快又方便
String概述:
Stringjoiner跟StringBuilder一样,也可以看成一个容器,创建之后里面的内容是可变的
作用:提高字符串的操作效率,而且代码写的特别简洁,但是目前市场上很少有人用
原因:JDK才出现
StringJoiner的构造方法
在这里插入图片描述
StringJoiner构造演示:

StringJoiner sj = new StringJoiner("---")
//1---2---3
StringJoiner sj = new StringJoiner(",","[","]");
//[1,2,3]

StringJoiner的成员方法
在这里插入图片描述
编写流程:
//1.创建对象
//2.添加元素
//3.打印
可以在最后根据结果修改创建对象中的参数

总结

1.String:表示字符串的类,定义很多操作字符串的方法
2.StringBuilder:一个可变的操作字符的容器,可以高效拼接字符串,还可以将容器里面的内容反转
3.StringJoiner
JDK8出现的一个可变的操作字符串的容器,可以高效,方便的拼接字符串。在拼接的时候,可以指定间隔符号,开始符号,结束符号。
在这里插入图片描述

字符串原理(1,2,3,4,5)

扩展底层原理(1,2)
在这里插入图片描述
应用比较时主要用的是:equals方法
扩展底层原理(3)
含有两种不同情况拼接方法:
1.右边无变量值:
在这里插入图片描述
在这里插入图片描述
2.右边有变量值:
查看底层代码可知:里面有new关键字,所以此方法效果慢,效率低
此方法十分浪费时间由于每一次使用都需要预估行数与距离
注意:

System.out.println(s1 == s2);
//判断的是地址值

字符串在拼接的时候,如有变量:
无论是哪种版本JDK8之前还是JDK8之后,都会产生一个新的字符串对象
判断地址值是否相同时,看右边有无变量,看串池内是否有相同的内容,如果有可以进行复制,那么两者的地址值相同

扩展底层原理5:StringBuilder源代码分析:
方法capacity表示获取容量
查看源代码可得,此方法具有自动扩容的性质

扩展底层原理(5):
StringBuilder源码分析
默认创建一个长度一个为16的字节数组
添加的内容长度小于16,直接存
添加的内容长度大于16,直接存
添加的内容大于16会扩容(原来的容量*2+2)
如果扩容之后还不够,以实际长度为准

字符串原理总结

在这里插入图片描述

综合练习

在这里插入图片描述

import java.util.Scanner;

public class StringTest10 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = sc.next();
        boolean flag = fun1(str);
        if (flag) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
                char c = str.charAt(i);
                int num = c - '0';
                String str1 = fun2(num);
                sb.append(str1);
            }
            String k = sb.toString();
            System.out.println("转换后字符串为:" + k);
        } else {
            System.out.println("该字符串不符合要求;");
        }

    }


    public static boolean fun1(String str) {
        if (str.length() > 9) {
            return false;
        } else {
            {
                for (int i = 0; i < str.length(); i++) {
                    char ch = str.charAt(i);
                    if (ch < '0' || ch > '9') {
                        return false;
                    }
                }

            }
        }
        return true;
    }

    public static String fun2(int num) {
        String[] change = {"Ⅰ", "Ⅱ", "Ⅲ", "Ⅳ", "Ⅴ", "Ⅵ", "Ⅶ", "Ⅷ", "Ⅸ" };
        return change[num - 1];

    }
}

运行结果:请输入一个字符串:
123456789
转换后字符串为:ⅠⅡⅢⅣⅤⅥⅦⅧⅨ

案例.调整字符串

在这里插入图片描述

方法1:

public class StringTest11 {
    public static void main(String[] args) {
        String strA = "abcde";
        String strB = "bcdea";
        boolean result = check(strA, strB);
        System.out.println(result);
    }
    public static boolean check(String strA, String strB){
        for (int i = 0; i < strA.length(); i++) {
            strA = rotateString(strA);
            if (strA.equals(strB)){
                return true;
            }
        }
        return false;
    }
    public static String rotateString(String str){
        char first = str.charAt(0);
        String end = str.substring(1);
        return end + first;
    }
}

运行结果:true
方法2:

public class StringTest11 {
    public static void main(String[] args) {
        String strA = "abcde";
        String strB = "b";
        boolean result = check(strA, strB);
        System.out.println(result);
    }
    public static boolean check(String strA, String strB){
        for (int i = 0; i < strA.length(); i++) {
            strA = rotateString(strA);
            if (strA.equals(strB)){
                return true;
            }
        }
        return false;
    }
    public static String rotateString(String str){
        char[] array = str.toCharArray();
        char first = array[0];
        for (int i = 1; i < str.length(); i++) {
            array[i-1] = array[i];
        }
        array[array.length-1] = first;
        String  result = new String(array);
        return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值