java 第八章 > 字符串 API StringBuilder

本文详细介绍了Java中字符串的基本操作,包括API的使用、字符串的创建与比较、字符统计、字符串截取、敏感词替换、字符串拼接以及对称字符串判断。讲解了String类的特性,如不可变性、常量池以及StringBuilder类用于提高字符串操作效率的方法。还提供了多个实例代码展示实际应用。
摘要由CSDN通过智能技术生成

字符串

API
  • API:应用程序编程接口
  • Java API:JDK中提供的各种功能的Java类
  1. 打开
  2. 点击显示
  3. 页签搜索
  4. 看在哪个包
  5. 看描述
  6. 看构造方法
  7. 看成员方法
键盘录入字符串
 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入:");
        String s = sc.nextLine();
        System.out.println(s);
  • next():遇到空格,tab就不在录入,结束标记:空格,tab

  • nextLine(): 可以将数据完全录入,结束标记:空格换行

  • nextInt和nextLine不能一起使用

String

  • 核心类库,不用导包
  • 只要 “” 就是字符串
  • 创建后无法更改(只换内存地址)
String 常见的构造方法
  • public String() 创建一个空白的字符串对象,不含有任何内容
  • public String(char[] chs):根据字符数组的内容,来创建字符串对象
  • public Sring(String original):更具传入的字符内容,来创建字符串的对象
  • String s = “abc”; :直接赋值的方式创建字符串对象,内容就是abc

Ps:String这个类比较特殊,打印其对象吗的时候,不会出现内存地址而是该对象所记录的真是内容

创建字符串对象的区别对比
  • ==作比较

基本数据类型:比较具体的值

应用数据类型:比较地址值

  • 以 “” 方式创建的,只要顺序和大小写相同,无论出现几次,JVM都只会建立一个String对象,并在字符串常量池中维护

字符串常量池: 不存在:创建,存在,不会重新创建建,而是直接复用

  • 通过new创建的字符串对象,每一次nuw都会申请一个内存空间,虽然内容相同,但地址不同

  • 双引号创建的字符串对象,在字符串常量池中存储,通过构造方法创建的的字符串对象,在对内存中存储

String特点
  • Java程序中所有的双引号字符串,都是String类的对象
  • 字符串不可变,他们的值在创建后不能被改变
  • 虽然String的值是不可变的,但是他们可以被共享
String s1 = "abc"
String s2 = "ab"
String s3 = s2 + "c"
System.out,println(S1 == S2);

结果为false

当字符串直接使用 + 号连接的时候,系统底层会自动创建一个StringBuider对象,然后再调用其append方法完成凭借,拼接后,再调用toString方法转换为String类型

String s1 = "abc";
String s2 = "a" + "b" + "c";
System.out.println(s1 == s2);

结果为true

Java 存在常量优化机制"a" + “b” + “c"拼接成"abc”

字符串的比较

equals()方法比较

  • 将此字符串与指定对象进行比较,由于我们比较的是字符串对象,所以参数直接传递一个字符串
System.out.println(s1.equals(s2)
案例

用户登录

package Day8.DengLu;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-04
 * time:21:13
 */
public class DengLu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //创建用户名和密码(用字符串)
        String username = "a123456";
        String password = "123456a";
        //循环三次
        for (int i = 0; i < 3; i++) {
            //用户输入用户名和密码
            System.out.println("请输入用户名:");
            String username2 = sc.nextLine();
            System.out.println("请输入密码:");
            String password2 = sc.nextLine();
            //判断用户名和密码是否匹配
            if (username2.equals(username) && password2.equals(password)) {
                System.out.println("登陆成功!");
                break;
            } else if (i == 0 || i == 1) {//前两次输入错误
                System.out.println("登录失败,请重试!");
            } else {//第三次输入错误
                System.out.println("登录失败,三次机会已用完!");
                break;
            }
        }
    }
}

案例

遍历字符串

charAt:字符串索引

package Day8.StingBianLi;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-04
 * time:21:36
 */
public class StringBiLi {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //用户输入字符串
        System.out.println("请用户输入一个字符串:");
        String s = sc.nextLine();
        //遍历字符串
        for (int i = 0; i < s.length(); i++){
            System.out.print(s.charAt(i) + "   " );
        }
    }
}

toCharArray:将字符串拆分为字符数组并返回

package Day8.StingBianLi;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-04
 * time:21:43
 */
public class StringBiLi02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //用户输入字符串
        System.out.println("请用户输入一个字符串:");
        String s = sc.nextLine();
        //拆分字符串数组
        char[] arr = s.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + "   ");
        }
    }
}

案例

统计字符次数

package Day8.ZiFuShu;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-05
 * time:9:02
 */
public class ZiFuShu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入:");
        String s = sc.nextLine();
        int a = 0;
        int b = 0;
        int c = 0;

        char[] arr = s.toCharArray();

        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 'A' && arr[i] <= 'Z') {
                a++;
            } else if (arr[i] >= 'a' && arr[i] <= 'z') {
                b++;
            } else if (arr[i] >= '0' && arr[i] <= '9') {
                c++;
            }
        }
        System.out.println("大写字母有:" + a + "个");
        System.out.println("小写字母有:" + b + "个");
        System.out.println("数字有:" + c + "个");

    }
}

案例

手机号屏蔽

  • 字符串截取

substring(int )从传入的索引位置开始,直达结束,返回截取的字符串

substring(int , int )从索引位置开始到索引位置结束,返回截取的字符串,包含头不包含尾

package Day8.ShouJiHao;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-05
 * time:9:18
 */
public class ShouJiHaoJieQu {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入一个手机号");
        String s = sc.nextLine();

        String s1 = s.substring(0, 3);
        String s2 = s.substring(7);

        System.out.println(s1 + "****" + s2);
    }
}

案例

敏感词替换

  • replace(旧字符串,新字符串) 替换内容
package Day8.MinGanCi;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-05
 * time:9:28
 */
public class MinGanCi {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        System.out.println("请输入:");

        String s = sc.nextLine();

        String s1 = s.replace("TMD", "***");

        System.out.println(s1);
    }
}

案例

切割字符串

  • split 切割并返回字符串数组
package Day8.QieGe;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-05
 * time:9:39
 */
public class QieGe {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入学生信息:");
        String stuIn = sc.nextLine();
        String[] arr = stuIn.split(" ");

        Stuedent stu = new Stuedent(arr[0],arr[1]);
        System.out.println(stu.getName() + "..." + stu.getAge());
    }
}

String 方法小结
方法名说明
equals比较字符串内容,严格区分大小写
equalslgnoreCase比较字符串内容,忽略大小写
length返回字符串长度
charAt返回索引处的char值
toCharArray()将字符串拆分为数组返回
substring(int,int)根据开始和结束索引,截取字符串(包含头,不包含尾)
substring(int)根据索引位置,截取字符串,直到最后一位
replace(char,char)使用新值替换旧值(旧在前)
split根据规则切割字符串

StringBuilder

  • 是一个可变的字符串了类,可以看成一个容器

  • 提高字符串的操作效率

1秒 = 1000毫秒

System.curentTimeMillis()获取1970.1.1到现在所经历的毫秒值

StringBuilder构建方法
方法名说明
StringBuilder创建一个空白可变字符串对象,不含有任何内容
StringBuilder(String str)根据字符串内容,来创建可变字符串对象

成员方法

方法名说明
append(任意类型)添加数据返回对象本身
reverse返回相反的字符串序列
length返回长度(字符出现的个数)
toString通过toString()就可以实现吧StringBuilder转换为String

append 可以链式编程,一直加.
区别

  • String:内容是不可改变的
  • StringBuilder:内容是可变的
案例

对称字符串

package Day8.DuiChen;

import java.util.Scanner;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-05
 * time:10:52
 */
public class DuiChen {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = getString(sc);

        StringBuilder sb = new StringBuilder(s);

        String s1 = getString(sb);

        print(s, s1);


    }

    private static void print(String s, String s1) {
        if (s.equals(s1)) {
            System.out.println("是对称字符串");
        } else {
            System.out.println("不是对称字符串");
        }
    }

    private static String getString(StringBuilder sb) {
        sb.reverse();
        return sb.toString();
    }

    private static String getString(Scanner sc) {
        System.out.println("请输入对称字符串:");
        return sc.nextLine();
    }
}

转换

  • StringBuilder转String,通过toString()
  • String转StringBuilder,通过有参构造
案例

拼接字符串

package Day8.PinJie;

/**
 * description:JavaSE teaching
 * author:sdjady
 * date:2021-01-05
 * time:11:06
 */
public class PinJie {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String s = arrToString(arr);
        System.out.println(s);

    }
    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]).append("]");
            }else{
                sb.append(arr[i]).append(", ");
            }

        }
        String s = sb.toString();
        return (s);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aming_sth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值