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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 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);
} 

友情提示:

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

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

相关文章
|
10天前
|
存储 安全 Java
Java零基础-字符串详解
【10月更文挑战第18天】Java零基础教学篇,手把手实践教学!
89 60
|
26天前
|
Java 数据库
案例一:去掉数据库某列中的所有英文,利用java正则表达式去做,核心:去掉字符串中的英文
这篇文章介绍了如何使用Java正则表达式从数据库某列中去除所有英文字符。
37 15
|
19天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
31 2
|
29天前
|
Java
JAVA易错点详解(数据类型转换、字符串与运算符)
JAVA易错点详解(数据类型转换、字符串与运算符)
44 4
|
26天前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
91 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
102 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
2月前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
49 3
|
2月前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
16 2
|
3月前
|
存储 NoSQL 数据库
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
这篇文章讲述了在分布式微服务系统中添加用户注册和登录功能的过程,重点介绍了用户注册时通过远程服务调用第三方服务获取短信验证码、使用Redis进行验证码校验、对密码进行MD5加密后存储到数据库,以及用户登录时的远程服务调用和密码匹配校验的实现细节。
认证服务---整合短信验证码,用户注册和登录 ,密码采用MD5加密存储 【二】
|
1月前
|
Java
Java 登录输入的验证码
Java 登录输入的验证码
22 1