String & StringBuilder & StringJoiner

字符串学习内容:

String、StringBuilder、StringJonier、StringBuffer、Pattern、Matcher

创建String对象的两种方式:
  • 直接赋值
  • New
//1.直接赋值获取一个字符串对象
String s1 = "abc";
System.out.println(s1);

//2.使用new的方式来获取一个字符串对象
//传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
//需求:我需要修改字符串的内容。 abc  Qbc
//abc --> {'a','b','c'}  --> {'Q','b','c'} -->Qbc

char [] chs = {'a','b','c'};
String s4 = new String(chs);
System.out.println(s4); //abc

//传递一个字节数组,根据字节数组的内容再创建一个新的字符串对象
//应用场景:以后在网络当中传输的数据其实都是字节信息
//我们一般要把字节信息进行转换,转成字符串,此时就要用到这个构造了
byte [] bytes = {97,98,99,100};
String s5 = new String(bytes);
System.out.println(s5);
字符串比较:
  • boolean equals(要比较的字符串)  完全一样结果才是true,否则为false
  • boolean equalslgnoreCase(要比较的字符串)  忽略大小写的比较
package net.dqsy;

public class StringDemo_2 {
    public static void main(String[] args) {
        //1.创建两个字符串对象
        String s1 = new String("abc");
        String s2 = "Abc";

        //2. == 号比较
        //基本数据类型:比的是数据值
        //引用数据类型:比的是地址值
        System.out.println(s1 == s2);  //false

        //3.比较字符串对象中的内容是否相等
        boolean result1 = s1.equals(s2);
        System.out.println(result1);  //false

        //4.比较字符串对象中的内容是否相等,忽略大小写
        boolean result2 = s1.equalsIgnoreCase(s2);
        System.out.println(result2);  //true
    }
}

String

练习4:用户登录

已知正确的用户名和密码,请用程序实现模拟用户登录
总共给出三次机会,登录之后,给出相应的提示

package net.dqsy;

import java.util.Scanner;

public class StringDemo_4 {
    public static void main(String[] args) {
        //练习:
        //已知正确的用户名和密码,请用程序实现模拟用户登录
        //总共给出三次机会,登录之后,给出相应的提示

        //读题拆解法
        //1.定义两个变量,记录"正确的用户名和密码"
        String rightUsername = "zhangxihe";
        String rightPassword = "050503";


        Scanner sc = new Scanner(System.in);

        //2.键盘录入,用户名和密码  "程序实现模拟用户登录"
        for (int i = 0 ; i < 3 ; i++ ) {  //0 1 2

            System.out.println("请输入用户名:");
            String username = sc.next();

            System.out.println("请输入密码:");
            String password = sc.next();

            //3.比较
            if(username.equals(rightUsername)  &&   password.equals(rightPassword)){
                System.out.println("用户登录成功!");
                break;  //跳出循环
            }else{
                if(i == 2){//最后一次机会也错误了,此时要提示账号被锁定
                    System.out.println("账号" + username +"被锁定,请联系工作人员:17304361113");
                }else{
                    System.out.println("用户登录失败,用户名或密码有误,您还剩下" + (2-i) + "次机会");
                }

            }



        }

        //4.循环三次
        //把重复的内容选中,ctrl + alt +t ,选for循环

        //5.提醒剩下有n次机会   //2 1 0

        //6.没有机会时,提醒联系工作人员


    }
}

练习5:遍历字符串

键盘录入一个字符串,使用程序实现 在控制台遍历该字符串

  • public char charAt(int index) :根据索引返回字符
  • public int length(); :返回此字符串的长度
  • 数组的长度: 数组名.length
  • 字符串的长度: 字符串对象.length();
  • “钢门123吹小雪 长度:8

    package net.dqsy;
    
    import java.util.Scanner;
    
    public class StringDemo_5 {
        public static void main(String[] args) {
            //1.键盘录入一个字符串
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串:");
            String str = sc.next();
    
            //2.进行遍历
            for (int i = 0; i < str.length(); i++) {
                //快捷键:str.le + 回车 + .fori
                //i依次表示字符串的每一个索引
                char c = str.charAt(i);
                //快捷键:str.ch
                System.out.println(c);
                
            }
        }
    }

练习6:统计字符次数

键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符

出现的次数 (不考虑其他字符)

  • char c = str.charAt(i); 
    package net.dqsy;
    import java.util.Scanner;
    public class StringDemo_6  {
        public static void main(String[] args) {
            //1.键盘录入一个字符串
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串:");
            String str = sc.next();
    
            //2.统计---计数器思想  //定义三个计数器
            int bigcount  = 0;
            int smallcount  = 0;
            int numcount = 0;
    
            for (int i = 0; i < str.length(); i++) {
                //i 依次表示字符串中的每一个索引
                char c = str.charAt(i);
    
                //对c进行判断
                if(c >= 'A' && c <= 'Z'){
                    //char类型的变量在参与计算的时候自动类型提升为int
                    //查询ascii码表
                    bigcount ++ ;
                }else if(c >='a' && c <= 'z'){
                    smallcount ++ ;
                }else if(c >= '0' && c <= '9'){
                    numcount ++;
                }
    
            }
    
            System.out.println("此字符串中大写字母的个数为:" + bigcount);
            System.out.println("此字符串中小写字母的个数为:" + smallcount);
            System.out.println("此字符串中数字的个数为:" + numcount);
        }
    }

练习7:拼接字符串

package net.dqsy;

public class StringDemo_7 {
    //1.我要干嘛?————遍历数组,把数组拼接成字符串
    //2.我干这件事情需要什么才能完成?————数组
    //3.我干完了是否需要把结果返回给调用处?————返回一个拼接之后的字符串

    //如果调用处需要继续使用,那么必须返回
    //如果调用处不需要继续使用,那么可以返回也可以不返回
    public static void main(String[] args) {
        int [] arr = {1,2,3};
        String str = arrToString(arr);
        System.out.println(str);
    }

    public static String arrToString(int [] arr){
        if(arr == null){
            return "";
        }

        if(arr.length == 0) {
            return "[]";
        }

        String result = "[";

        //当代码执行到这里,表示什么?
        //表示数组不是null,也不是长度为0的,它是一个有意义的数组

        //快捷键:arr.fori
        for (int i = 0; i < arr.length; i++) {
            //i是索引 arr[i]是元素
            if(i == arr.length-1){  //数组中最后一个元素
                result = result + arr[i] ;
            }else{
                result = result + arr[i] + "," ;
            }
            
        }
       
 //此时拼接右括号
        result = result + "]";

        return result;

        //[123
        //改写成[1,2,3]

        //[1,2,3,]
        //最后一个数后不要逗号
    }
}

练习8:字符串反转

定义一个方法,实现字符串反转。键盘录入一个字符串,调用该方法之后,在控制台输出结果。例如:键盘录入abc,输出结果cba

  • 捷径:StringBuilder的reverse方法
  • 截图工具Snipaste
  • 快捷键 F1
    package net.dqsy;
    
    public class StringDemo_8 {
        public static void main(String[] args) {
            String result  = reverser("abc");
            System.out.println(result);
        }
        //1.实现字符串的反转
        //2.键盘录入字符串
        //3.需要结果进行输出
        public static String reverser(String str){
            String result = "";
            //abc
            //倒着遍历
            //快捷键:.forr
            for (int i = str.length()-1; i >= 0; i--) {
                //i依次表示字符串的每一个索引(倒着的)
                char c = str.charAt(i);
                result = result + c;
            }
            return result;
            }
        }

练习10:手机号屏蔽

需用到的方法:

  • String substring(int beginIndex , int endIndex) 截取  可以把一大段的字符串截取其中的一部分

注意:包头不包尾 包左不包右 (0,2) -> 0 1

           只有返回值才是截取的小串

  • String substring(int beginIndex) 截取到末尾
    package net.dqsy;
    
    public class StringDemo_10 {
        public static void main(String[] args) {
            //1.获取一个手机号码
            String phoneNumber = "17304361113";
    
    
            //2.截取前面的三位
            String start = phoneNumber.substring(0,3);
            System.out.println(start);
    
            //3.截取后面的四位
            String over = phoneNumber.substring(7);
            System.out.println(over);
    
            //4.拼接
            String result = start + "****" + over;
            System.out.println(result);
        }
    }

练习11:身份证信息查看

需用到的方法:

  • 如何从字符得到数字??
  • ASCII码: ‘0’ ---> 48 ,所以得到的字符-48得到数字
    package net.dqsy;
    
    public class StringDemo_11 {
        public static void main(String[] args) {
            //1.定义一个字符串记录身份证号码
            String id = "321802204512281234";
    
            //2.获取出生年月日 7~14位
            String year = id.substring(6,10);
            String month = id.substring(10,12);
            String day = id.substring(12,14);
            System.out.println("出生年月日为:");
            System.out.println(year + "年" + month + "月" + day + "日");
    
            //3.获取性别
            char gender = id.charAt(16);  //'3' ---> 3 //或者id.substring(16);
    
            //字符变成数字?
            //利用ASCII码表
            //'0'---> 48
    
            int num = gender - 48;
            if(num % 2 == 0 ){
                System.out.println("性别为女");
            }else{
                System.out.println("性别为男");
            }
    
        }
    }

练习12:敏感词替换

需用到的方法:

  • String replace(旧值,新值) 替换
  • 注意点:只有返回值才是替换之后的结果
    package net.dqsy;
    
    public class StringDemo_12 {
        public static void main(String[] args) {
            //1.获取到说的话
            String talk = "你玩的真好,以后不要再玩了,TMD!CNM~";
    
            //2.定义一个敏感词库
            String [] arr = {"TMD","CNM","SB","MLGB"};
            
            //3.循环替换 快捷:arr.fori
            for (int i = 0; i < arr.length; i++) {
                talk = talk.replace(arr[i],"***");
            }
            
            //4.打印结果
            System.out.println(talk);
        }
    }

StringBuilder概述

当字符串直接拼接100万次,运行速度非常慢。用完StringBuilder刷的一下就完事了

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

StringBuilder构造方法:
  • public StringBuilder()  空参方法
  • public StringBuilder(String Srt)  有参方法
StringBuilder的常用方法:
  • public StringBuilder append(任意形式)  添加数据
  • public StringBuilder reverse()  反转容器中的内容 abc ---> cba
  • public int length() 返回长度(字符出现的个数) abc ---> 3
  • public String toString()  通过toString()可以实现把StringBuilder(此时还不是字符串,是对象)转换成String(字符串)
package net.dqsy;

public class StringBuilderDemo_3 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");

        //2.添加元素
        //快捷键sb.ap

        //直接加在已添加的参数后面
        /*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);
    }
}

链式编程原理:
  • sb.append("aaa").append("bbb").append("ccc").append("ddd");

练习5:对称字符

使用StringBuilder的场景:
  • 1.字符串的拼接
  • 2.字符串的反转
package net.dqsy;

import java.util.Scanner;

public class StringBuilderDemo_5 {
    
    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();

        /*等同于
        StringBuilder sb = new StringBuilder();  //创建了新的字符串对象
        sb.append(str);  //录入字符串
        sb.reverse();*/  //反转

        System.out.println(result);

        //3.比较
        if(str.equals(result)){
            System.out.println("当前字符串是对称的");
        }else{
            System.out.println("当前字符串不是对称的");
        }

    }
}

 

练习6:拼接字符串

package net.dqsy;

public class StringBuilderDemo_6 {
    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){//i是当前的最后一个元素
                sb.append(arr[i]);
            }else{
                sb.append(arr[i] + ", ");
            }
        }
        sb.append("]");

        return sb.toString();

    }
}

StringJoiner概述

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

作用:提高字符串的效率,而且代码编写的特别简洁,但是目前市场上很少有人用....那就先不写了

总结

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值