Java-常用类库

  1. 键盘录入一个字符串,统计该字符串中大写字母字符、小写字母字符、数字字符出现的次数,不考虑其他字符。

    java 复制代码
    package test10;
    
    import java.util.Scanner;
    public class T1 {
        public static void main(String[] args) {
            System.out.println("请输入仅包含英文、数字的字符串:");
            Scanner scanner = new Scanner(System.in);
            String ch=scanner.nextLine();
    
            int big=0;
            int small=0;
            int digit=0;
    
    //        try{
    //            for(int i=0;i<ch.length();i++){
    //                char c=ch.charAt(i);
    //                if(Character.isUpperCase(c)){
    //                    big++;
    //                }
    //                else if(Character.isLowerCase(c)){
    //                    small++;
    //                }
    //                else if(Character.isDigit(c)){
    //                    digit++;
    //                }
    //            }
    //        }catch(Exception e){
    //            System.out.println(e.getMessage());
    //        }finally{scanner.close();}
    
    
    //        增强写法:  注意这个for循环是没有办法遍历String类型的 所以需要toCharArray()强制转换为char类型给for循环遍历
                    try{
                for(char c:ch.toCharArray()){
                    if(Character.isUpperCase(c)){
                        big++;
                    }
                    else if(Character.isLowerCase(c)){
                        small++;
                    }
                    else if(Character.isDigit(c)){
                        digit++;
                    }
                }
            }catch(Exception e){
                System.out.println(e.getMessage());
            }finally{scanner.close();}
            System.out.println("输入的字符串中大写英文的数量为:"+big);
            System.out.println("输入的字符串中小写英文的数量为:"+small);
            System.out.println("输入的字符串中数字的数量为:"+digit);
    
        }
    }

截图

2、将输入手机号码的4到7位屏蔽后输出,如"131****9468"。

java 复制代码
package test10;

import java.util.Scanner;
public class T2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入11位手机号:");
//        注意手机号应该使用String类型 因为手机号11位虽然全部都是数字,但是int类型只能存下10位数字,且有些手机号开头为0,int类型会忽略开头的0  Long也不行 因为也会忽略开头的0
        String number=scanner.nextLine();

//        对于屏蔽4-7位数字 有2个方法 第一个是subString  第2个是使用replace进行替换
        try{
            if(number.length()!=11){
                throw new Exception("手机号的长度不对,请输入11位手机号!");
            }
//            注意这里还是需要使用else if的 因为只要保证11位手机号才再验证是否都是数字
            else if(!number.matches("\\d+")){
                throw new Exception("请输入仅包含数字的手机号!");
            }

//          这里其实可以直接写\\d{11}来保证11位数字手机号 这样前面的num.length!=11就可以删去
//            if(!number.matches("\\d{11}"))throw new Exception("请输入11位仅包含数字的手机号");

            else if(!number.startsWith("1")){
                throw new Exception("请输入以1开头的手机号!");
            }
//            法1:使用subString()方法
//        String start=number.substring(0,3);
//        String end=number.substring(7);
//        System.out.println("输入的手机号为:"+number);
//        System.out.println("屏蔽了4-7位手机号的结果为:"+start+"****"+end);

//            法2:使用replaceAll方法
            System.out.println("原始手机号为:"+number);
            System.out.println("屏蔽了4-7位手机号的结果为:"+number.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2"));

        }catch(Exception e){
            System.out.println(e.getMessage());
        }finally{scanner.close();}




    }
}

截图:

3、给定两个字符串,A和B。A的旋转操作就是将A最左边的字符移动到最右边。例如,若A="abcde",在一次移动后结果就是"bcdea"。如果在若干次调整操作之后,A能变成B,那么返回true,如果不能匹配成功,则返回false。

java 复制代码
package test10;

import java.util.Scanner;
public class T3 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入字符串A:");
        String A=scanner.nextLine();
        System.out.println("请输入字符串B:");
        String B=scanner.nextLine();
//        这题需要先判断判断AB的长度是否相等,不相等直接返回false
//        然后进行chatAt(0)和subString(1)从1开始的所有进行拼接实现最左边的放到最右边
//        每循环1次 就判断a.equals(b)是否为true

        T3 t3 = new T3();
        boolean panduan=t3.is_rotate(A,B);
        if(panduan){
            System.out.println("A通过旋转可以得到B,返回true");
        }else{
            System.out.println("A通过旋转无法得到B,返回false");
        }
    }


    public boolean is_rotate(String A,String B) {
//        先判断长度是否相等
        if (A.length() != B.length()) {
            return false;
        }
        if(A.isEmpty()){
            return false;//去除空串的情况
        }
//        然后将A最左边的字符挪到最右边
        for (int i = 0; i < A.length(); i++) {
//            先得到最左边的字符 chatAt的返回值类型是char
            char first = A.charAt(0);
//            也可以用subString方法 不过这种没有charAt方便,
//            而且返回值类型为String 不是char 所以还需要使用调用方法获取第一个字符 注意:String类型是无法强制转换成char类型的 这种写法太多余了
//            String first=A.substring(0,1);
//            char c=first.charAt(0);
            String middle_end = A.substring(1);
            //注意这里就拼接了 将最左边的弄到最右边
            A = middle_end+first;
            if (A.equals(B)) {//最后判断字符是否完全一样就行
                return true;
            }
        }
        return false;//所有循环都完成后 没有和B匹配成功的 所以输出false
    }
}

截图:

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

java 复制代码
package test10;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Scanner;

//4.已知正确的用户名和密码,请用程序实现模拟用户登录。总共给三次机会,登录之后给出相应的提示。
//先把正确的用户名和密码写死 然后提示用户输入用户名和密码 (这里要注意用户名和密码必须匹配)
//        如果错误就返回密码错误 如果正确就返回密码正确 登录成功 如果循环了 3 次(这里指的是只有3次循环也就是i=0到i=2)
//        都没有成功 return 请在 2 小时后在进行输入

//注意:1. 如果 flag 是 false(没登录成功)→ !flag → true → if 条件成立 → 执行里面的代码:打印锁定提示
//    2. 如果 flag是 true(登录成功了)→ !flag → false → if 条件不成立 → 里面的代码不跑
public class T4 {
    public static void main(String[] args) {
        String user_name="wudililiwang";
        String user_passwd="master";

        Scanner scanner = new Scanner(System.in);

//        获取当前时间 以及获取2h之后的时间  锁定时间问题 应当是从3次密码输错之后才进行时间的计数 而不是一开始就获取当前时间
//        放在for循环结束之后再执行!
//        LocalDateTime now=LocalDateTime.now();
//        LocalDateTime now_after_2h=now.plusHours(2);

        boolean flag=false;

        for(int i=0;i<=2;i++){
//            注意这里输入用户名和密码应当在for循环里面 这样才能保证最大输入账号密码的次数为3
//            i从0开始 所以是第i+1次
            System.out.println("这是第"+(i+1)+"次输入用户名和密码!请注意每2h最多只有3次输错机会!");
            System.out.println("请输入用户名:");
            String user1=scanner.nextLine();
            System.out.println("请输入"+user1+"的密码:");
            String user_ps=scanner.nextLine();

//            这里也需要注意 一开始我使用的是==  这里对于字符串的比较应当使用equals
            if(user_name.equals(user1) && user_ps.equals(user_passwd)){
                System.out.println("密码正确,登录成功!");
                flag=true;
                break;//登录成功就跳出循环,没有必要再执行循环了
            }
            else{
                System.out.println("密码错误,请重新输入!你还有"+(2-i)+"次输入机会!");
            }


//            一开始我使用的是if else-if else写法 这里有个致命问题 就是最后的else永远不知道到了第几个循环 因为整个if语句只是单词循环
//            最终循环到了i=2后,也只是结束到else if语句,根本进不到else中
//            而且还有个问题 就是这个锁定时间问题 应当是从3次密码输错之后才进行时间的计数 而不是一开始就获取当前时间
//            else{
//                System.out.println("密码输入次数已用尽,请于"+now_after_2h+"后再次进行登录!");
//            }
        }//////

//        一定要在for循环外面
            if(!flag){
                LocalDateTime now=LocalDateTime.now();
                LocalDateTime now_after_2h=now.plusHours(2);
                DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                这个LocalDateTime输出会带T 丑! 格式化一下
                System.out.println("密码输入次数已用尽,请于"+now_after_2h.format(fmt)+"后再次进行登录!");
            }
        scanner.close();





    }
}

截图:

相关推荐
Wang's Blog1 小时前
Java 项目实战: 交友项目 - MongoDB集群:概述
java·mongodb·交友
sunsijia219831 小时前
2026年10月22日 PHP漏洞临时处理
开发语言·php
wangchunyu1141 小时前
JAVA ThreadLocal、伪共享与Disruptor
java
慧都小项1 小时前
图解 MyEclipse Deployment Assembly:资源如何进入部署产物?
java·ide·tomcat·maven·myeclipse·部署排查
Wang's Blog1 小时前
Java 项目实战: 交友项目 - MongoDB基础总结与自检清单
java·mongodb·交友
Aurorar0rua1 小时前
CS50 x 2024 Notes Python - 02
开发语言·python·学习方法
鬼手点金1 小时前
消息的四种角色
java·前端·人工智能·git·深度学习
zzu123zsw1 小时前
面对多 RPC 扇入超时崩溃:深入 asyncTool 核心 DAG 编排与线程池隔离防护
java·网络·spring boot·网络协议·rpc·并发编程
zyseo81 小时前
谷歌SEO 网站迁移 301 映射脚本:旧站 URL 自动匹配新站结构
开发语言·python