Java字符串训练

一、用户登录

  • 需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
  • 总共给三次机会,登录之后,给出相应的提示。
import java.util.Scanner;

public class StringTest1 {
    public static void main(String[] args) {
        String username = "abc";
        String pw = "qwe";

        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < 3; i++) {
            System.out.println("请输入用户名:");
            String inputUsername = scanner.next();
            System.out.println("请输入密码:");
            String inputPassword = scanner.next();

            if (inputUsername.equals(username) && inputPassword.equals(pw)) {
                System.out.println("登录成功");
                break;
            } else {
                if (i == 2) {
                    System.out.println("账户"+inputUsername+"被锁定");
                }else {
                    System.out.println("账号或密码错误,你还剩下" + (2 - i) + "次机会");
                }
            }
        }
    }
}

在这里插入图片描述

二、统计字符次数

  • 需求:键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数(不考虑其他字符)
import java.util.Scanner;

public class StringTest2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = scanner.next();

        int bigCount = 0;
        int smallCount = 0;
        int numberCount = 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') {
                numberCount++;
            }
        }

        System.out.println("小写字母有:" + smallCount + "个");
        System.out.println("大写字母有:" + bigCount + "个");
        System.out.println("数字有:" + numberCount + "个");
    }
}

在这里插入图片描述

三、拼接字符串

  • 需求:定义一个方法,把int数组中的数据按照指定的格式拼接成一个字符串返回,调用该方法,并在控制台输出结果。
  • 例如:数组为 int[] arr = {1, 2, 3},执行方法后的输出结果为:[1, 2, 3]

1. 使用String

public class StringTest3 {
    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) {
        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;
    }
}

2. 使用StringBuilder

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

在这里插入图片描述

四、字符串反转

  • 需求:定义一个方法,实现字符串反转。
  • 键盘录入一个字符串,调用该方法后,在控制台输出结果。
  • 例如:键盘录入abc,输出结果cba。
import java.util.Scanner;

public class StringTest4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = scanner.next();
        String reverser = reverser(str);
        System.out.println(reverser);
    }

    public static String reverser(String str) {
        String result = "";
        for (int i = str.length() - 1; i >= 0; i--) {
            char c = str.charAt(i);
            result += c;
        }
        return result;
    }
}

在这里插入图片描述

五、金额转换

  • 需求:键盘录入一个七位以内的正整数,将整数转为中文描述,不足七位补零。
    在这里插入图片描述
import java.util.Scanner;

public class StringTest5 {
    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 = "";
        while (money != 0) {
            int ge = money % 10;
            String capitalNumber = getCapitalNumber(ge);
            moneyStr = capitalNumber + moneyStr;
            money = money / 10;
        }

        // 不满7位补零
        int count = 7 - moneyStr.length();
        for (int i = 0; i < count; i++) {
            moneyStr = "零" + moneyStr;
        }

        // 插入单位
        String[] arr = {"佰", "拾", "万", "仟", "佰", "拾", "元"};
        String result = "";
        for (int i = 0; i < moneyStr.length(); i++) {
            char c = moneyStr.charAt(i);
            result = result + c + arr[i];
        }

        System.out.println(result);
    }

    public static String getCapitalNumber(int number) {
        String[] arr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
        return arr[number];
    }
}

在这里插入图片描述

六、手机号屏蔽

  • 需求:已知一个11位手机号,把该手机号4~7位改成****。
public class StringTest6 {
    public static void main(String[] args) {
        String phoneNumber = "13112349468";
        System.out.println(phoneNumber);

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

在这里插入图片描述

七、身份证信息查看

  • 需求:已知一个身份证号,获取出生年月日和性别。
public class StringTest7 {
    public static void main(String[] args) {
        String id = "123456202001011234";

        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 + "日");

        char gender = id.charAt(16);
        // 把字符转成数字
        int num = gender - 48;
        if (num % 2 == 0) {
            System.out.println("性别为:女");
        } else {
            System.out.println("性别为:男");
        }
    }
}

在这里插入图片描述

八、敏感词替换

public class StringTest8 {
    public static void main(String[] args) {
        String talk = "你玩的真好,以后不要再玩了,TMD";
        System.out.println(talk);
        
        String[] arr = {"TMD", "CNM", "MLGB", "SB"};
        for (int i = 0; i < arr.length; i++) {
            talk = talk.replace(arr[i], "***");
        }
        System.out.println(talk);
    }
}

在这里插入图片描述

九、对称字符串

  • 需求:键盘接受一个字符串,程序判断出该字符串是否是对称字符串,并在控制台打印是或不是。
  • 对称字符串:123321、111。
  • 非对称字符串:123123。
import java.util.Scanner;

public class StringBuilderDemo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串");
        String str = sc.next();

        // 反转键盘录入的字符串
        String result = new StringBuilder().append(str).reverse().toString();

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

在这里插入图片描述

十、数字转罗马数字

  • 需求:键盘录入一个长度小于等于9的数字字符串,将内容变成罗马数字
  • 罗马数字没有0,如果键盘录入包含0,可以变成" "
import java.util.Scanner;

public class StringTest9 {
    public static void main(String[] args) {
        String str;
        Scanner scanner = new Scanner(System.in);

        // 获取数字
        while (true) {
            System.out.println("请输入一个数字:");
            str = scanner.next();

            // 校验字符串是否满足规则
            boolean flag = checkStr(str);
            if (flag) {
                break;
            } else {
                System.out.println("当前字符串不符合规则,请重新输入");
            }
        }

        // 字符串拼接
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char c = str.charAt(i);
            int number = c - 48;
            String s = changeLuoMa(number);
            sb.append(s).append(" ");
        }

        System.out.println(sb);
    }

    public static String changeLuoMa(int number) {
        String[] arr = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
        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;
    }
}

在这里插入图片描述

十一、调整字符串

  • 给定两个字符串,A和B
  • A的旋转操作就是将A最左边的字符移动到最右边。
  • 例如:若A=“abcde”,在移动一次之后结果就是:“bcdea”
  • 如果在若干次调整操作之后,A能变成B,那么返回True
  • 如果不能匹配成功,则返回false
public class StringTest10 {
    public static void main(String[] args) {
        String A = "abcde";
        String B = "cdeab";
        
        System.out.println("A = \"abcde\"");
        System.out.println("B = \"cdeab\"");
        System.out.println(check(A, B) ? "True" : "False");
    }

    public static boolean check(String strA, String strB) {
        for (int i = 0; i < strA.length(); i++) {
            strA = strA.substring(1) + strA.charAt(0);
            if (strA.equals(strB)) return true;
        }
        return false;
    }
}

在这里插入图片描述

十二、打乱字符串

  • 需求:输入一个字符串,并打乱顺序。
import java.util.Random;
import java.util.Scanner;

public class StringTest11 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String str = scanner.next();

        // 字符串转为字符数组
        char[] chars = str.toCharArray();

        // 打乱数组
        Random random = new Random();
        for (int i = 0; i < chars.length; i++) {
            int randomIndex = random.nextInt(chars.length - 1);
            char temp = chars[randomIndex];
            chars[randomIndex] = chars[i];
            chars[i] = temp;
        }

        // 把字符数组在变回字符串
        String result = new String(chars);
        System.out.println(result);
    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

iFulling

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

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

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

打赏作者

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

抵扣说明:

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

余额充值