【Java实验五】字符串加密、模拟用户登录、生成验证码、春节倒计时等

简介: 1、实验题目:字符串加密键盘输入一个原始字符串作为明文,然后使用加密方法加密,再对加密字符串进行解密。样例如下图,加密方法自定,完成其功能并测试。
🏠个人主页: 黑洞晓威
🧑个人简介:大家好,我是晓威,一名普普通通的大二在校生,希望在CSDN中与大家一起成长。🎁如果你也在正在学习Java,欢迎各位大佬来到我的博客查漏补缺呀,如果有哪里写的不对的地方也欢迎诸佬指正啊。

@[toc]

实验内容

1、实验题目:字符串加密

键盘输入一个原始字符串作为明文,然后使用加密方法加密,再对加密字符串进行解密。样例如下图,加密方法自定,完成其功能并测试。

源代码:

public static void main(String[] args) {
   Scanner scanner = new Scanner(System.*in*);
   System.*out*.println("请输入明文");
   System.*out*.println("*****************************");
   System.*out*.println("加密方法:每个字符的ASCLL码加1");
   System.*out*.println("*****************************");
   char[] chars;//实例化一个字符串数组用于加密与解密
   String str = null;//实例化一个字符串用于输入明文
   if(scanner.hasNext()){
     str = new String(scanner.next());//得到明文
   }
   scanner.close();
 
   chars = str. toCharArray();//将明文从String转化为char[]数组
   for(int i = 0;i<chars.length;i++){
     chars[i]+=1;//将字符串数组中的每一个元素加一,即ASCLL码加一
   }
   String str2 = new String(chars);//再将char[],转化为String字符串输出
   System.*out*.println("密文:"+str2);
   System.*out*.println("*****************************");
 
   //解密
   for(int i =0;i<chars.length;i++){
     chars[i]-=1;//同理,再将每个ASCLL减一
   }
   String str3 = new String(chars);//转化为字符串
   System.*out*.println("解密:"+str3);
 }

 

列出测试数据和实验结果截图:

2、实验题目:模拟用户登录

编写一个程序,模拟用户登录。程序要求如下:

(1)用户名和密码正确(不区分大小写),提示“登录成功”,并打开Windows的计算器程序;

(2)用户名或密码不正确,提示“用户名或密码错误”;

(3)总共有3次登录机会,超过3次,则提示“登录失败,无法再继续登录”。

源代码:

public static void main(String[] args) {
    System.out.println("欢迎打开计算器的小实验o(* ̄▽ ̄*)ブ");
    Scanner scanner = new Scanner(System.in);
    String user = null;//用户名
    String password = null;//密码
    
        System.out.println("发现您还没有注册快来注册吧(≧▽≦*)o");
        System.out.println("请注册您的账号");
         user = scanner.next();
         
        boolean same = false;//作为两次密码是否一致的标识
        System.out.println("请设置您的密码");
         password = scanner.next();
        System.out.println("请再次输入您的密码");
        String password2 =scanner.next();
        if(password.equals(password2)){//如果密码一致
            same = true;//两次密码一致
            System.out.println("注册成功!");
        }
        while (!same){//如果两次密码不一致。重新输入
            System.out.println("两次输入的密码不一致哦,请重新输入密码");
            password = scanner.next();
            System.out.println("再次输入密码");
            password2 = scanner.next();
            if(password.equals(password2)){
                same = true;//标识为true跳出循环
                System.out.println("终于注册成功啦");
            }
        }
    

    int count = 3;//给定的三次机会
    while (count>0){//循环登陆
        System.out.println("请进行登录(☆▽☆)");
        System.out.println("输入用户名");
        String myuser = scanner.next();
        System.out.println("请输入密码");
        String mypasswprd = scanner.next();
        
        //如果用户名密码正确
        if(myuser.equals(user) && mypasswprd.equals(password)){
            System.out.println("登录成功!即将打开计算器!");
            try {
                //打开计算器
                Process pro = Runtime.getRuntime().exec("calc " );
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            break;
        }else {
            System.out.println("账号或密码错误,请重新登录!");
            count--;//机会减一
        }
    }
    //如果三次都失败
    if(count==0){
        System.out.println("登录失败,无法再登录了/(ㄒoㄒ)/~~");
    }
      scanner.close();
}

3、实验题目:统计字符个数

从键盘输入一个字符串,分别统计该字符串中所有大写字母、小写字母、数字、其它字符的个数,并分类输出这些字符和统计结果。(提示:不考虑字符内容,例如:Hello123World,大写2个,小写8个,数字3个。)

源代码:

public static void main(String[] args) {
    //记录每种字符的个数,初始化为0;
    int big = 0,small = 0,num = 0,other = 0;
    String str = null;
    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入一串字符");
    if (scanner.hasNext()){
        str = scanner.next();
    }

    //将字符串转化为char[]数组方便统计每一个字符
    char[] chars = str.toCharArray();
    for(char ch : chars){
        if(ch>=48 && ch <=57){
            num++;//数字
        }else if(ch>=65 && ch<=90){
            big++;//大写字母
        }else if(ch>=97 && ch<=122){
            small++;//小写字母
        }else {
            other++;//其他
        }
    }
    System.out.printf("数字有:%d个,小写字母有%d个,大写字母有%d个,其他符号有%d个",num,small,big,other);
}

列出测试数据和实验结果截图:

4、实验题目:字符串缓冲区练习

(1)使用StringBuffer类对键盘输入的字符串进行反转。

(2)使用String和StringBuffer类分别对数组进行字符串拼接,使其变成一个字符串。

源代码:

public class S5_4 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串");
        StringBuffer strb = new StringBuffer(scanner.next());
        
        reverse(strb);
        System.out.println("反转后为:"+strb);

        String[] arr = new String[]{"Hello","Word"};
        String str = strcomb(arr);
        System.out.println("String拼接后:"+str);

        StringBuffer sbuff = buffcomb(arr);
        System.out.println("StringBuffur拼接后:"+sbuff);
    }
    //定义反转方法
    public static void reverse(StringBuffer strb){
        int n = strb.length();//获得字符串长度
        for(int i = 0;i<n/2;i++){
            //首位元素互换
            char ch =strb.charAt(i);
            char chl =strb.charAt(n-1-i);
            strb.setCharAt(i,chl);
            strb.setCharAt(n-1-i,ch);
        }
    }
    //定义String拼接方法
    public static String strcomb(String[] arr){
        String str = new String();
        for(String s : arr){//增强for循环遍历
            str+=s;//拼接
        }
        return str;
    }

    //定义StringBuffer拼接方法
    public static StringBuffer buffcomb(String[] arr){
        StringBuffer sbuff = new StringBuffer();
        for(String str : arr){
            sbuff.append(str);//拼接
        }
        return sbuff;
    }

}

5、实验题目:生成验证码

使用Random类创建一个6位的验证码,其中包含数字、字母的组合,并通过键盘输入该验证码,验证通过(不区分大小写)时提示“恭喜验证成功!”,否则提示“验证失败!”。

源代码:

public static void main(String[] args) {
    int num = 1234567890;
    String s ="qwertyuiopasdfghjklzxcvbnm";
    String S=s.toUpperCase();
    String word=s+S+num;
    //先定义一个字符串数组,其中包含数字以及大小写的字母
    char[] chars = word.toCharArray();

    Random random = new Random();
    String str = "";//验证码
    for(int i = 0;i<6;i++){//循环六次
        //随机生成一个int 属于[0,chars.length),正好匹配字符串数组的下标
        int index = random.nextInt(chars.length);
        str += chars[index];//将chars[index]拼接到str
    }
    System.out.println("生成的验证码为:"+str);

    Scanner scanner = new Scanner(System.in);
    System.out.println("请输入验证码");
    String in = scanner.next();
    //注意忽略大小写
    if(str.compareToIgnoreCase(in)==0){
        System.out.println("恭喜验证成功!");
    }else System.out.println("验证失败");
}

6、实验题目:春节倒计时

根据所学知识,计算明年(兔年)春节的倒计时天数并输出:“距离兔年春节还有*天”。

源代码:

public static void main(String[] args) {
    //获得当前的事件
    LocalDateTime now = LocalDateTime.now();
    //获得新年的时间
    LocalDateTime newyear = LocalDateTime.of(2023, 1, 1, 0, 0);

    //获得相应时间距离1970年的秒数
    long time1 = now.toEpochSecond(ZoneOffset.ofHours(0));
    long time2 = newyear.toEpochSecond(ZoneOffset.ofHours(0));

    //计算相差多少天
    long day = (time2-time1)/60/60/24;
    System.out.printf("距离兔年春节还有%d天",day);
}

列出测试数据和实验结果截图:

7、实验题目:二月天

源代码:

public static void main(String[] args) {
    System.out.println("请输入年份");
    Scanner scanner = new Scanner(System.in);
    int year = scanner.nextInt();

    //闰年判断条件:1.能被4整除但不能被100整除
    //            2.能被400整除
    if(year%4==0 && year%100!=0 || year%400==0){
        System.out.println("这一年的二月只有28天诶");
    }else {
        System.out.println("这一年的二月有29天呢");
    }
}

8、实验题目:正则表达式。(选做)

“中华人民共和国成立于1949年10月1日”,利用正则表达式提取出其中的数字。

源代码:

public static void main(String[] args) {
    String str = new String("中华人民共和国成立于1949年10月1日");
    // 定义一个模式,其中正则表达式为非数字
    Pattern pattern = Pattern.compile("[^0-9]");
    //找到str种所有符合正则表达式的元素,即非数字元素
    Matcher matcher = pattern.matcher(str);
    //将非数字的元素全部替换为“”,即最后只剩下了数字
    String num = matcher.replaceAll("");
    System.out.println("提取的数字为:"+num);
} 

友情提示:

代码仅供大家学习与参考,要想提升自己一定要自己亲自敲一边代码哦,让我们一起努力吧🍭
🎉文章到这里就结束了,感谢诸佬的阅读。🎉

💕欢迎诸佬对文章加以指正,也望诸佬不吝点赞、评论、收藏加关注呀😘

相关文章
|
5月前
|
SQL JSON Java
告别字符串拼接:用Java文本块优雅处理多行字符串
告别字符串拼接:用Java文本块优雅处理多行字符串
481 108
|
7月前
|
自然语言处理 Java Apache
在Java中将String字符串转换为算术表达式并计算
具体的实现逻辑需要填写在 `Tokenizer`和 `ExpressionParser`类中,这里只提供了大概的框架。在实际实现时 `Tokenizer`应该提供分词逻辑,把输入的字符串转换成Token序列。而 `ExpressionParser`应当通过递归下降的方式依次解析
423 14
|
7月前
|
SQL JSON Java
告别拼接噩梦:Java文本块让多行字符串更优雅
告别拼接噩梦:Java文本块让多行字符串更优雅
700 82
|
8月前
|
存储 安全 算法
用 MD5 加密 WordPress 验证码的完整教程
本文详细介绍了如何使用MD5加密技术增强WordPress验证码的安全性。通过将验证码答案以MD5形式加密并存储在Session中,避免了明文传输可能带来的安全风险。文章从形势分析、MD5算法介绍到实战操作步骤,逐步引导读者实现加密验证流程。同时提供了调试方法,确保修改生效。此教程旨在为网站添加一层安全保障,提升对抗网络攻击的能力。
486 1
|
8月前
|
消息中间件 机器学习/深度学习 Java
java 最新技术驱动的智能教育在线实验室设备管理与实验资源优化实操指南
这是一份基于最新技术的智能教育在线实验室设备管理与实验资源优化的实操指南,涵盖系统搭建、核心功能实现及优化策略。采用Flink实时处理、Kafka消息队列、Elasticsearch搜索分析和Redis缓存等技术栈,结合强化学习动态优化资源调度。指南详细描述了开发环境准备、基础组件部署、数据采集与处理、模型训练、API服务集成及性能调优步骤,支持高并发设备接入与低延迟处理,满足教育机构数字化转型需求。代码已提供下载链接,助力快速构建智能化实验室管理系统。
232 44
|
11月前
|
存储 缓存 安全
Java字符串缓冲区
字符串缓冲区是用于处理可变字符串的容器,Java中提供了`StringBuffer`和`StringBuilder`两种实现。由于`String`类不可变,当需要频繁修改字符串时,使用缓冲区更高效。`StringBuffer`是一个线程安全的容器,支持动态扩展、任意类型数据转为字符串存储,并提供多种操作方法(如`append`、`insert`、`delete`等)。通过这些方法,可以方便地对字符串进行添加、插入、删除等操作,最终将结果转换为字符串。示例代码展示了如何创建缓冲区对象并调用相关方法完成字符串操作。
305 13
|
11月前
|
存储 缓存 安全
Java 字符串详解
本文介绍了 Java 中的三种字符串类型:String、StringBuffer 和 StringBuilder,详细讲解了它们的区别与使用场景。String 是不可变的字符串常量,线程安全但操作效率较低;StringBuffer 是可变的字符串缓冲区,线程安全但性能稍逊;StringBuilder 同样是可变的字符串缓冲区,但非线程安全,性能更高。文章还列举了三者的常用方法,并总结了它们在不同环境下的适用情况及执行速度对比。
272 17
|
存储 算法 前端开发
一文带你学会国产加密算法SM4的java实现方案
今天给大家带来一个国产SM4加密解密算法的java后端解决方案,代码完整,可以直接使用,希望给大家带来帮助,尤其是做政府系统的开发人员,可以直接应用到项目中进行加密解密。
4284 1