String字符串

1、API和API帮助文档

在这里插入图片描述
在这里插入图片描述

package apiDemo;

import java.util.Scanner;

public class ScannerDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个小数");
        double v = sc.nextDouble();
        System.out.println(v);
    }
}

在这里插入图片描述

2、String概述

在这里插入图片描述
在这里插入图片描述

3、String构造方法代码实现和内存分析

在这里插入图片描述

package stringDemo;

public class StringDemo1 {
    public static void main(String[] args) {
        //1、直接赋值
        String s1 = "abc";
        System.out.println(s1);
        //2、使用new的方式创建
        //空参构造:一个空白的字符串对象
        String s2 = new String();
        System.out.println("q" + s2 + "r");

        //传递一个字符数组,根据字符数组的内容再创建一个新的字符串对象
        //需求:我要修改字符串的内容  abc - Qbc
        //就可以通过创建一个字符数组,通过修改字符数组里面的元素,进而修改字符串
        char[] chs = {'a', 'b', 'c', 'd'};
        String s3 = new String(chs);
        System.out.println(s3);

        //传递一个字节数组,根据字节数组的内容在创建一个新的字符串对象
        //应用场景:以后在网络当中传输的数据其实都是字节信息
        //我们一般要把字节信息进行转换,此时就需要用到这个构造了
        byte[] bytes = {97, 98, 99, 100};
        String s4 = new String(bytes);
        System.out.println(s4);

    }
}

在这里插入图片描述
在这里插入图片描述

  • 直接创建

在这里插入图片描述
在这里插入图片描述
代码简单,节约内存

  • 使用new创建
    在这里插入图片描述
    有new就会开辟一个新的小空间,地址值不同不会复用浪费空间

4、字符串的比较

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package stringDemo;

import java.util.Scanner;

public class StingDemo2 {
    public static void main(String[] args) {
        String s1 = new String("abc");
        String s2 = "abc";
        System.out.println(s1 == s2);

        System.out.println(s1.equals(s2));

        String s3 = "Abc";
        System.out.println(s1.equals(s3));
        System.out.println(s1.equalsIgnoreCase(s3));

        //键盘录入的字符串和代码中定义的字符串比较

        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        System.out.println(str == s2);
        //输出false,next方法底层也是new出来的
        //以后只要想比较字符串的内容,就必须要用String里面的方法
    }

}

在这里插入图片描述

  • 案例:用户登录
    在这里插入图片描述
package stringDemo;

import java.util.Scanner;

public class StringDemo3 {
    public static void main(String[] args) {
        //读题拆解法

        //1.定义两个变量记录用户名和密码
        String name = "lisi";
        String password = "123456";
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            //2、键盘录入用户名和密码

            System.out.println("请输入用户名");
            String userName = sc.next();
            System.out.println("请输入用户密码");
            String userPassword = sc.next();
            //3、比较
            if(name.equals(userName) && password.equals(userPassword)){
                System.out.println("登录成功");
                break;
            }else {
                if(i == 2){
                    System.out.println("最后一次机会用完,账户被锁定");
                }else{
                    System.out.printf("登录失败,用户名或密码错误,您还剩下%d次机会", (2-i));
                }
            }
        }
    }
}

  • 遍历字符串
    在这里插入图片描述
package stringDemo;

import java.util.Scanner;

public class StringDemo4 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //1.键盘输入一个字符串
        System.out.println("请输入一个字符串");
        String str = sc.next();
        //2.遍历
        for (int i = 0; i < str.length(); i++) {
            //i 依次表示字符串的每一个索引
            char c = str.charAt(i);
            System.out.println(c);
        }
    }
}

  • 统计字符个数
    在这里插入图片描述
package stringDemo;

import java.util.Scanner;

public class StringDemo5 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        int bigCount = 0;
        int smallCount = 0;
        int numCount = 0;
        int otherCount = 0;
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            if (c >= 'a' && c <= 'z'){
                smallCount ++;
            }else if(c >= 'A' && c <= 'Z'){
                bigCount ++;
            }else if(c >= '0' && c <= '9'){
                numCount ++;
            }else{
                otherCount ++;
            }

        }
        System.out.println("大写字母个数" + bigCount);
        System.out.println("小写字母个数" + smallCount);
        System.out.println("数字个数" + numCount);
        System.out.println("其他字符个数" + otherCount);
    }
}

  • 拼接字符串
    在这里插入图片描述
package stringDemo;

public class StringDemo6 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        String str = arrToString(arr);
        System.out.println(str);
    }

    //1.我要干嘛 ---- 遍历数组并把数组拼接成一个字符串
    //2、我干这件事情需要什么才能完成 ----- 数组
    //3、我干完了是否要把结果返回给调用处 ---- 返回字符串

    public static String arrToString(int[] arr){
        if(arr == null){
            return "";
        }
        if(arr.length == 0){
            return "[]";
        }
        String result = "[";
        for (int i = 0; i < arr.length; i++) {
            if(i == arr.length - 1){
                result += arr[i];
            }else {
                result += (arr[i] + ",");
            }
        }
        result += "]";
        return result;
    }
}

在这里插入图片描述

  • 字符串反转
    在这里插入图片描述
package stringDemo;

import java.util.Scanner;

public class StringDemo7 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        String s = reverse(str);
        System.out.println("反转后的字符串是" + s);
    }
    public static String reverse(String str){
        // str.length()forr 回车直接生成,选中一个变量 shift+f6 批量修改
        String str1 = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            char c = str.charAt(i);
            str1 += c;
        }
        return str1;
    }
}

在这里插入图片描述

  • 金额转换
    在这里插入图片描述
package stringDemo;

import java.util.Scanner;

public class StringDemo8 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int money;
        while (true){
            System.out.println("请输入一个合法金额");
            money = sc.nextInt();
            if(money >= 0 && money <= 9999999){
                break;
            }else {
                System.out.println("请重新输入");
            }
        }
        String moneyStr = "";
        //得到money中的每一位数字
        while (true){
            int ge = money % 10;
            String capitalNumber = getCapitalNumber(ge);
            moneyStr = capitalNumber + moneyStr;
            money /= 10;
            if(money == 0){
                break;
            }
        }
        //在前面补0,补齐7位
        int count = 7 - moneyStr.length();
        for (int i = 0; i < count; i++) {
            moneyStr = "零" + moneyStr;
        }
        String result = "";
        //加上金额的单位
        String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            result = result + c + arr[i];
        }
        System.out.println("转换后的金额:" + result);
    }

    //1.定义一个方法 1 --- 壹
    public static String getCapitalNumber(int num){
        String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return arr[num];
    }
}


在这里插入图片描述

  • 手机号屏蔽
    在这里插入图片描述
package stringDemo;

public class StringDemo9 {
    public static void main(String[] args) {
        String phoneNumber = "13112349468";

        String start = phoneNumber.substring(0, 3);

        String end = phoneNumber.substring(7);
        String result = start + "****" + end;
        System.out.println(result);
    }
}

在这里插入图片描述

  • 敏感词替换
    在这里插入图片描述
package stringDemo;

public class StringDemo10 {
    public static void main(String[] args) {
        //获取说的话
        String talk = "你玩的真好,下次不要玩了,TMD,SB";
        //定义一个敏感词库
        String[] arr = {"TMD", "CNM", "SB", "MLGB"};

        for (int i = 0; i < arr.length; i++) {
            talk = talk.replace(arr[i], "***");
        }
        System.out.println(talk);
    }
}

在这里插入图片描述

StringBuilder

使用场景:1.字符串拼接。2、字符串反转
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 常用方法练习
package stringBuilderDemo;

public class StringBuilderDemo1 {
    public static void main(String[] args) {
        //1.创建对象
        StringBuilder sb = new StringBuilder("abc");
        //2.添加元素
//        sb.append(123);
//        sb.append("xyz");
        //输出  abc123xyz
        sb.reverse(); //cba

        //StringBuilder是java已经写好的类,java在底层对他做了一些特殊处理
        //打印对象不是地址值而是属性值
        System.out.println(sb);

        sb.append("sdf");
        // toString方法将StringBuilder对象转换成字符串,StringBuilder只是一个字符串操作工具,并不是字符串
        String str = sb.toString();
        System.out.println(str);//cbasdf
    }
}

  • 对称字符串
package stringBuilderDemo;

import java.util.Scanner;

public class StringBuilderDemo2 {
    public static void main(String[] args) {
        //1.键盘输入字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        //2.反转键盘输入的字符
//        StringBuilder sb = new StringBuilder();
//        sb.append(str);
//        sb.reverse();
//        System.out.println(sb);
        StringBuilder sb = new StringBuilder().append(str).reverse(); //链式编程
        if (str.equals(sb.toString())){
            System.out.println("是对称字符串");
        }else {
            System.out.println("不是对称字符串");
        }
    }
}

  • StringBuilder实现字符串拼接
    在这里插入图片描述
package stringBuilderDemo;

public class StringBuilderDemo3 {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        System.out.println(arrToString(arr));
    }

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

在这里插入图片描述

StringJoiner

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package stringBuilderDemo;

import java.util.StringJoiner;

public class Demo4 {
    public static void main(String[] args) {
        //1、创建对象
        StringJoiner sj = new StringJoiner(",", "[", "]");
        //2、添加元素
        sj.add("1").add("2").add("3");
        //3、打印
        System.out.println(sj);
        System.out.println(sj.length());
        System.out.println(sj.toString());
    }
}

在这里插入图片描述
在这里插入图片描述

字符串原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

综合练习

  • 转换罗马数字
    在这里插入图片描述
package text;

import java.util.Scanner;

public class Test1 {
    public static void main(String[] args) {
        //1.键盘输入一个字符串
        Scanner sc = new Scanner(System.in);
        String str;
        //2.检验字符串是否满足规则
        while (true) {
            System.out.println("请输入一个字符串");
            str = sc.next();
            boolean flag = checkStr(str);
            if(flag){
                break;
            }else{
                System.out.println("当前字符串不符合规则,请重新输入");
                continue;
            }
        }
        //3.字符转换
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
//            System.out.println(c);
//            System.out.print(changeLouMa(c - '0'));
            result.append(changeLouMa(c - '0'));
        }
        //4、输出结果
        System.out.println(result);

    }
    //将数字转换成罗马数字
    public static String changeLouMa(int number){
        String[] arr = {"","Ⅰ","Ⅱ","Ⅲ","Ⅳ","Ⅴ","Ⅵ","Ⅶ","Ⅷ","Ⅸ"};
        return arr[number];
    }

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


}

  • 调整字符串
    在这里插入图片描述
    方法一,使用subString截取
package text;

public class Test2 {
    public static void main(String[] args) {
        //1、定义两个字符串
        String strA = "abcde";
        String strB = "cdeab";
        //2、旋转字符串并比较
        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 = rotate(strA);
            if (strA.equals(strB)){
                return true;
            }
        }
        return false;
    }

    //旋转字符串
    public static String rotate(String str){
        char first = str.charAt(0);
        String end = str.substring(1);
        return end + first;
    }
}

方法二,使用字符数组

package text;

public class Test3 {
    public static void main(String[] args) {
        //1、定义两个字符串
        String strA = "abcde";
        String strB = "cdeab";
        //2、旋转字符串并比较
        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 = rotate(strA);
            if (strA.equals(strB)){
                return true;
            }
        }
        return false;
    }

    //旋转字符串
    public static String rotate(String str){
        //可以把字符串先变成一个字符数组,然后调整字符数组里面的数组,最后再把字符数组变成字符串
        char[] arr = str.toCharArray();

        char first = arr[0];
        for (int i = 0; i < arr.length-1; i++) {
            arr[i] = arr[i+1];
        }
        arr[arr.length -1] = first;
        //使用字符数组创建一个字符串对象
        String result = new String(arr);
        return result;
    }
}

  • 键盘输入任意字符串,打乱里面的内容
package text;

import java.util.Random;
import java.util.Scanner;

public class Test4 {
    public static void main(String[] args) {
        //1、键盘录入一个字符串
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();
        //2、转换成字符数组,并打乱
        String result = changeStr(str);
        //3、输出结果
        System.out.println(result);
    }
    //从0索引开始,跟一个随机索引进行位置交换
    //当数组里面的每一个元素都跟随机索引交换完毕后,内容就被打乱了
    public static String changeStr(String str){
        char temp; //用于交换
        char[] arr = str.toCharArray();
        for (int i = 0; i < arr.length; i++) {
            int index = new Random().nextInt(arr.length);
                temp = arr[i];
                arr[i] = arr[index];
                arr[index] = temp;
        }
        str = new String(arr);
        return str;
    }
}

  • 生成验证码
    内容:可以是小写字母,大写字母,数字。
    规则:长度为5(四个字母一个数字,数字位置任意)
package text;

import java.util.Random;

public class Test5 {
    public static void main(String[] args) {
        /*
        生成验证码
        内容:可以是小写字母,大写字母,数字
        规则:长度为5(四个字母一个数字,数字位置任意)
         */
        //1.可以把所有的大写字母,小写字母都放在一个数组当中
        String letter = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        String num = "0123456789";
        //2、从数组中随机获取5次
        char[] arr = letter.toCharArray();
        char[] arr2 = new char[5];
        for (int i = 0; i < 5; i++) {
            int index = new Random().nextInt(52);
            arr2[i] = arr[index];
        }
        //3、生成0-9之间的随机数,去替换上面生成的数组随机位置的字母
        char[] arr3 = num.toCharArray();
        int randomNum = new Random().nextInt(10); //产生随机数字
        int index = new Random().nextInt(5); //产生随机要替换的位置
        arr2[index] = arr3[randomNum];
        System.out.println(arr2);
    }
}

  • 给定两个字符串形式表示的非负数num1和num2,返回num1和num2的乘积,他们的乘积也表示为字符串形式
package text;

public class Test6 {
    public static void main(String[] args) {
        /*
        给定两个字符串形式表示的非负数num1和num2,返回num1和num2的乘积,他们的乘积也表示为字符串形式
         */
        String numStr1 = "123456";
        String numStr2 = "789";
        //将数字字符串转换成数字,并计算乘积
        int result = change(numStr1) * change(numStr2);
        //将乘积转换成字符串,并输出
        String resultStr = result + "";
        System.out.println(resultStr);
    }
    public static int change(String str){
        char[] arr = str.toCharArray();
        int number = 0;
        for (int i = arr.length - 1; i >= 0; i--) {
            number += Math.pow(10, arr.length - 1 - i);
        }
        return number;
    }
}

  • 给你一个字符串s,由若干个单词组成,单词前后用一些空格字符隔开,返回字符串中最后一个单词的长度,单词是指仅有字母组成、不包含任何空格字符的最大子字符串。
package text;

public class Test7 {
    public static void main(String[] args) {
        /*
        给你一个字符串s,由若干个单词组成,单词前后用一些空格字符隔开
        返回字符串中最后一个单词的长度
        单词是指仅有字母组成、不包含任何空格字符的最大子字符串
         */
        String str = new String("hello world"); //这里也可以自己修改成键盘录入
        String result = str.substring(checkIndex(str));
        System.out.println(result);
    }

    //找到倒数第一空格的索引,如果没有空格(表示只有一个单词)返回0索引
    public static int checkIndex(String str){
        char[] arr = str.toCharArray();
        for (int i = arr.length - 1; i >= 0 ; i--) {
            if (arr[i] == ' '){
                return i + 1;
            }
        }
        return 0;
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值