Java程序设计实验5 | Java API应用

*本文是博主对Java各种实验的再整理与详解,除了代码部分和解析部分,一些题目还增加了拓展部分(⭐)。拓展部分不是实验报告中原有的内容,而是博主本人自己的补充,以方便大家额外学习、参考。

(解析部分还没加,过几天补)

目录

一、实验目的

二、实验内容

1、字符串加密

2、模拟用户登录

3、统计字符个数

4、字符串缓冲区练习

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

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

5、生成验证码

6、春节倒计时

7、二月天

8、正则表达式。(选做)

三、实验总结 


一、实验目的

1、掌握String、StringBuffer和StringBuilder类的使用;

2、掌握System和Runtime类的使用;

3、掌握Math和Random类的使用;

4、掌握日期时间类的使用;

5、掌握包装类的使用;

6、了解正则表达式的使用。


二、实验内容

1、字符串加密

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

源代码:

import java.util.Scanner;

public class S5_1 {
    public static void main(String[] args) {
        System.out.print("明文:");
        Scanner in = new Scanner(System.in);
        String x = in.nextLine();
        System.out.println("***************************");
        System.out.println("加密方法:每个字符的ASCII码加1");
        System.out.println("***************************");
        System.out.print("密文:");
        char[] a = x.toCharArray();

        for (int i = 0; i < a.length; i++) {
            a[i] += 1;
            System.out.print(a[i]);
        }

        System.out.println();
        System.out.println("***************************");
        System.out.print("解密:");
        for (int i = 0; i < a.length; i++) {
            a[i] -= 1;
            System.out.print(a[i]);
        }
    }
}

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

2、模拟用户登录

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

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

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

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

源代码:

import java.util.Scanner;

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

        // 定义正确的用户名和密码(不区分大小写)
        String correctUsername = "admin";
        String correctPassword = "password";

        // 设置最大登录次数
        int maxLoginAttempts = 3;
        int remainingLoginAttempts = maxLoginAttempts;

        // 循环进行用户登录
        while (remainingLoginAttempts > 0) {
            // 用户输入用户名和密码
            System.out.print("请输入用户名:");
            String username = scanner.nextLine().toLowerCase(); // 将用户名转换为小写进行不区分大小写比较
            System.out.print("请输入密码:");
            String password = scanner.nextLine();

            // 验证用户名和密码
            if (username.equals(correctUsername) && password.equals(correctPassword)) {
                System.out.println("登录成功!正在打开Windows的计算器程序...");
                // 在这里可以添加打开计算器程序的代码
                break; // 登录成功,跳出循环
            } else {
                System.out.println("用户名或密码错误。剩余登录次数:" + (--remainingLoginAttempts));
                if (remainingLoginAttempts > 0) {
                    System.out.println("请重新输入。\n");
                } else {
                    System.out.println("登录失败,无法再继续登录。");
                }
            }
        }

        scanner.close();
    }
}

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

输入错误的情况:

输入正确的情况:

3、统计字符个数

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

源代码:

import java.util.Scanner;

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

        // 从键盘输入字符串
        System.out.print("请输入一个字符串:");
        String inputString = scanner.nextLine();

        // 统计字符个数
        int uppercaseCount = 0;
        int lowercaseCount = 0;
        int digitCount = 0;
        int otherCount = 0;

        // 遍历字符串中的每个字符
        for (char ch : inputString.toCharArray()) {
            if (Character.isUpperCase(ch)) {
                uppercaseCount++;
            } else if (Character.isLowerCase(ch)) {
                lowercaseCount++;
            } else if (Character.isDigit(ch)) {
                digitCount++;
            } else {
                otherCount++;
            }
        }

        // 输出统计结果
        System.out.println("大写字母个数:" + uppercaseCount);
        System.out.println("小写字母个数:" + lowercaseCount);
        System.out.println("数字个数:" + digitCount);
        System.out.println("其他字符个数:" + otherCount);

        scanner.close();
    }
}

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

4、字符串缓冲区练习

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

源代码:

import java.util.Scanner;

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

        // 从键盘输入字符串
        System.out.print("请输入一个字符串:");
        String inputString = scanner.nextLine();

        // 使用StringBuffer进行字符串反转
        StringBuffer reversedStringBuffer = new StringBuffer(inputString);
        reversedStringBuffer.reverse();

        // 输出反转后的字符串
        System.out.println("反转后的字符串:" + reversedStringBuffer.toString());

        scanner.close();
    }
}

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

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

源代码:

public class S5_4_2 {
    public static void main(String[] args) {
        // 使用String类进行数组字符串拼接
        String[] stringArray = {"Hello", ", ", "world", "!"};
        String concatenatedString = concatenateWithString(stringArray);
        System.out.println("使用String类拼接的字符串:" + concatenatedString);

        // 使用StringBuffer类进行数组字符串拼接
        StringBuffer stringBuffer = concatenateWithStringBuffer(stringArray);
        System.out.println("使用StringBuffer类拼接的字符串:" + stringBuffer.toString());
    }

    // 使用String类进行数组字符串拼接
    public static String concatenateWithString(String[] array) {
        String result = "";
        for (String str : array) {
            result += str;
        }
        return result;
    }

    // 使用StringBuffer类进行数组字符串拼接
    public static StringBuffer concatenateWithStringBuffer(String[] array) {
        StringBuffer result = new StringBuffer();
        for (String str : array) {
            result.append(str);
        }
        return result;
    }
}

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

5、生成验证码

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

源代码:

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

public class S5_5 {
    public static void main(String[] args) {
        // 生成验证码
        String verificationCode = generateVerificationCode();
        System.out.println(verificationCode);

        // 提示用户输入验证码
        System.out.print("请输入验证码(不区分大小写): ");
        Scanner scanner = new Scanner(System.in);
        String userInput = scanner.nextLine();

        // 验证输入的验证码
        if (verifyVerificationCode(userInput, verificationCode)) {
            System.out.println("恭喜验证成功!");
        } else {
            System.out.println("验证失败!");
        }

        scanner.close();
    }

    // 生成6位验证码
    private static String generateVerificationCode() {
        StringBuilder code = new StringBuilder();
        Random random = new Random();

        for (int i = 0; i < 6; i++) {
            // 随机选择数字或字母
            int choice = random.nextInt(2);
            if (choice == 0) {
                // 生成数字
                code.append(random.nextInt(10));
            } else {
                // 生成字母
                char randomChar = (char) ('A' + random.nextInt(26));
                // 随机选择字母是大写还是小写
                if (random.nextBoolean()) {
                    randomChar = Character.toLowerCase(randomChar);
                }
                code.append(randomChar);
            }
        }

        return code.toString();
    }

    // 验证输入的验证码是否匹配
    private static boolean verifyVerificationCode(String userInput, String verificationCode) {
        return userInput.equalsIgnoreCase(verificationCode);
    }
}

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

6、春节倒计时

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

源代码: 

import java.time.LocalDateTime;

public class S5_6 {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("春节倒计时");
        System.out.println("距离兔年春节还有");

        LocalDateTime newYear = LocalDateTime.of(2023, 1, 21, 0, 0, 0);
        LocalDateTime now = LocalDateTime.now();
        System.out.println(newYear.getDayOfYear() + (newYear.getYear() - now.getYear()) * 365 - now.getDayOfYear() - 1 + "天");
        System.out.print(newYear.getHour() - now.getHour() + 23 + ":");
        System.out.print(newYear.getMinute() - now.getMinute() + 59 + ":");
        System.out.print(newYear.getSecond() - now.getSecond() + 59);
        System.out.println();
    }
}

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

7、二月天

二月是一个有趣的月份,平年的二月有28天,闰年的二月有29天。编写一个程序,从键盘输入年份,根据输入的年份计算这一年的二月有多少天。

源代码: 

import java.util.Scanner;

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

        // 提示用户输入年份
        System.out.print("请输入年份: ");
        int year = scanner.nextInt();

        // 判断是否为闰年,并计算二月的天数
        int daysInFebruary = isLeapYear(year) ? 29 : 28;

        // 输出结果
        System.out.println(year + "年的二月有 " + daysInFebruary + " 天。");

        scanner.close();
    }

    // 判断是否为闰年的方法
    private static boolean isLeapYear(int year) {
        // 闰年的条件:年份能被4整除但不能被100整除,或者能被400整除
        return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    }
}

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

 

8、正则表达式。(选做)

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

源代码: 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class S5_8 {
    public static void main(String[] args) {
        String inputString = "中华人民共和国成立于1949年10月1日";

        // 定义正则表达式匹配数字
        String regex = "\\d+";

        // 编译正则表达式
        Pattern pattern = Pattern.compile(regex);

        // 创建Matcher对象
        Matcher matcher = pattern.matcher(inputString);

        // 提取数字并输出
        while (matcher.find()) {
            String number = matcher.group();
            System.out.println("提取的数字:" + number);
        }
    }
}

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


三、实验总结 

1、通过本实验,我理解了String、StringBuffer和StringBuilder类的使用以及String、StringBuffer和StringBuilder的异同:

  • 相同点:它们的底层都是通过char数组实现。
  • 不同点:①String对象一旦创建其值就不能修改的,如果要修改,将重新开辟内存空间来存储修改之后的对象,而StringBuffer和StringBuilder对象的值可以被修改的;②如果需要对字符串进行频繁的修改,不要使用String,因为会造成内存空间的浪费。

2、掌握了System和Runtime类的使用,用System类中的方法打开系统中的某些程序。

3、掌握了Math和Random类的使用,掌握了如何通过Random类或Math类中的Random()方法生成随机数。

4、掌握了日期时间类的使用。学会了如何编程求出某一时间距离当前时间还差多少时间。

5、对正则表达式有了一个初步的了解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/129355.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CSS3 2D、3D转换

一、CSS3 2D转换&#xff1a; CSS3转换可以对元素进行移动、缩放、转动、拉长或拉伸。 2D变换的方法&#xff1a;translate()、rolate()、scale()、skew()、matrix()。 <style> div { width:200px; height:100px; background-color:red; /* Rotate div */ tran…

混淆矩阵和相应参数详解

如果一个模型在能够尽量捕获少数类的情况下&#xff0c;还能够尽量对多数类判断正确&#xff0c;则这个模型就非常优秀了。为了评估这样的能力&#xff0c;我们将引入新的模型评估指标&#xff1a;混淆矩阵和ROC曲线。 上面是混淆矩阵。接下来我们结合图像解释一下准确率&#…

AMESim 2021安装教程

主要是AMESim的安装 写在前面&#xff0c;由于项目需要&#xff0c;需要自学AMESim&#xff0c;因此需要安装这个软件&#xff0c;目前仅仅安装使用&#xff0c;还不涉及到与MATLAB的联合仿真&#xff0c;老板说用 RT LAB半实物仿真平台&#xff0c;但是简单搜了一下&#xff0…

阻塞队列和定时器的使用

阻塞队列 谈到队列,大家就能想到队列的先进先出原则,但有些特殊的队列,虽然也是先进先出的,但是带有阻塞功能,我们把这种队列叫做阻塞队列. ★如果队列为空,执行出队操作就会阻塞,阻塞到另外一个线程往队列里添加元素(队列不为空)为止. ★如果队列满了,执行入队操作时,也会阻…

“GUI图形化界面的魅力、SSH协议的安全通信与IDEA集成Git的高效开发“

文章目录 引言一、GUI图形化界面的实际应用二、SSH协议的安全通信什么是SSH?git/github生成密钥并通过远程github仓库配置 三、IDEA集成Git的快速上手指南总结 引言 在计算机科学领域&#xff0c;图形用户界面&#xff08;GUI&#xff09;是一种以图形方式呈现信息和交互的用…

Flutter笔记:绘图示例 - 一个简单的(Canvas )时钟应用

Flutter笔记 绘图示例 - 一个简单的&#xff08;Canvas &#xff09;时钟应用 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_2855…

大数据毕业设计选题推荐-污水处理大数据平台-Hadoop-Spark-Hive

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【数据结构】Lambda

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; Lambda表达式 1. 背景1.1 语法1.2 函…

【C++优先队列使用】问题总结

说明&#xff1a; 文章内容为关于priority_queue的使用总结&#xff0c;在C中要包含头文件<queue>文章内容为个人的学习整理&#xff0c;如有错误&#xff0c;欢迎指正。 文章目录 1. 优先队列默认是大根堆2. 关于优先队列和sort的比较逻辑2.1 sort的比较逻辑2.2 优先队…

python操作链接数据库和Mysql中的事务在python的处理

python操作数据库 pymysql模块: pip install pymysql作用:可以实现使用python程序链接mysql数据库&#xff0c;且可以直接在python中执行sql语句 添加操作 import pymysql #1.创建链接对象c conn pymysql.Connect(host127.0.0.1,#数据库服务器主机地址port3306, #mysql的端口…

一篇文章让你了解Java中的继承

目录 继承一.什么是继承二.为什么要使用继承三.继承的语法四.继承中有重复怎么办&#xff1f;1.**访问原则** 五.super和this1.**this**2.**super**3.**super注意事项**4.**super和this异同点**六.构造方法的引入1.父类不带参数的构造方法2.父类带有参数的构造方法 七.继承中的…

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例

【二叉树】如何构建一个包含大量随机数节点的二叉树测试用例 前言一、案例准备二、自动生成随机二叉树工具类&#xff08;TreegenerateUtils&#xff09;三、如何调用随机二叉树工具类&#xff08;TreegenerateUtils&#xff09;&#xff1f; 前言 今天笔者在测试有关二叉树的…

Leetcode-206 反转链表

迭代法&#xff1a;将指针方向依次改变&#xff0c;定义两个指针pre和cur /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, Lis…

Bengio担任一作,联手一众图灵奖得主,预防AI失控,扛起AI监管大旗

图灵奖得主最近都在关心些什么呢&#xff1f;Yoshua Bengio&#xff0c;深度学习的奠基人之一&#xff0c;前几天他担任一作&#xff0c;联合多位大佬&#xff0c;发文探讨了如何在人工智能&#xff08;AI&#xff09;快速发展的时代管控相关风险&#xff0c;共同寻求当下生成式…

Flink SQL -- 命令行的使用

1、启动Flink SQL 首先启动Flink的集群&#xff0c;选择独立集群模式或者是session的模式。此处选择是时session的模式&#xff1a;yarn-session.sh -d 在启动Flink SQL的client&#xff1a; sql-client.sh 2、kafka SQL 连接器 在使用kafka作为数据源的时候需要上传jar包到…

python+requests接口自动化测试

原来的web页面功能测试转变成接口测试&#xff0c;之前大多都是手工进行&#xff0c;利用postman和jmeter进行的接口测试&#xff0c;后来&#xff0c;组内有人讲原先web自动化的测试框架移驾成接口的自动化框架&#xff0c;使用的是java语言&#xff0c;但对于一个学java&…

Linux学习之进程三

目录 进程控制 fork函数 什么是写时拷贝 进程终止 mian函数的返回值 退出码 错误码 exit() 进程等待 1.什么是进程等待&#xff1f; 2.为什么要进行进程等待&#xff1f; 3.如何进程进程等待&#xff1f; wait&#xff0c;waitpid&#xff1a; waitpid 进程替换 …

Lua更多语法与使用

文章目录 目的错误处理元表和元方法垃圾回收协程模块面向对象总结 目的 在前一篇文章&#xff1a; 《Lua入门使用与基础语法》 中介绍了一些基础的内容。这里将继续介绍Lua一些更多的内容。 同样的本文参考自官方手册&#xff1a; https://www.lua.org/manual/ 错误处理 下…

node插件MongoDB(四)—— 库mongoose 操作文档使用(新增、删除、更新、查看文档)(二)

文章目录 前言&#xff08;1&#xff09;问题&#xff1a;安装的mongoose 库版本不应该过高导致的问题&#xff08;2&#xff09;重新安装低版本 一、插入文档1. 代码2. node终端效果3. 使用mongo.exe查询数据库的内容 二、删除文档1. 删除一条2. 批量删除3. 代码 三、修改文档…

Go基础知识全面总结

文章目录 go基本数据类型bool类型数值型字符字符串 数据类型的转换运算符和表达式1. 算数运算符2.关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符6. 其他运算符运算符优先级转义符 go基本数据类型 bool类型 布尔型的值只可以是常量 true 或者 false。⼀个简单的例⼦&#…