• 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、字符串加密

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

    源代码:

    1. import java.util.Scanner;
    2. public class S5_1 {
    3. public static void main(String[] args) {
    4. System.out.print("明文:");
    5. Scanner in = new Scanner(System.in);
    6. String x = in.nextLine();
    7. System.out.println("***************************");
    8. System.out.println("加密方法:每个字符的ASCII码加1");
    9. System.out.println("***************************");
    10. System.out.print("密文:");
    11. char[] a = x.toCharArray();
    12. for (int i = 0; i < a.length; i++) {
    13. a[i] += 1;
    14. System.out.print(a[i]);
    15. }
    16. System.out.println();
    17. System.out.println("***************************");
    18. System.out.print("解密:");
    19. for (int i = 0; i < a.length; i++) {
    20. a[i] -= 1;
    21. System.out.print(a[i]);
    22. }
    23. }
    24. }

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

    2、模拟用户登录

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

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

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

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

    源代码:

    1. import java.util.Scanner;
    2. public class S5_2 {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. // 定义正确的用户名和密码(不区分大小写)
    6. String correctUsername = "admin";
    7. String correctPassword = "password";
    8. // 设置最大登录次数
    9. int maxLoginAttempts = 3;
    10. int remainingLoginAttempts = maxLoginAttempts;
    11. // 循环进行用户登录
    12. while (remainingLoginAttempts > 0) {
    13. // 用户输入用户名和密码
    14. System.out.print("请输入用户名:");
    15. String username = scanner.nextLine().toLowerCase(); // 将用户名转换为小写进行不区分大小写比较
    16. System.out.print("请输入密码:");
    17. String password = scanner.nextLine();
    18. // 验证用户名和密码
    19. if (username.equals(correctUsername) && password.equals(correctPassword)) {
    20. System.out.println("登录成功!正在打开Windows的计算器程序...");
    21. // 在这里可以添加打开计算器程序的代码
    22. break; // 登录成功,跳出循环
    23. } else {
    24. System.out.println("用户名或密码错误。剩余登录次数:" + (--remainingLoginAttempts));
    25. if (remainingLoginAttempts > 0) {
    26. System.out.println("请重新输入。\n");
    27. } else {
    28. System.out.println("登录失败,无法再继续登录。");
    29. }
    30. }
    31. }
    32. scanner.close();
    33. }
    34. }

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

    输入错误的情况:

    输入正确的情况:

    3、统计字符个数

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

    源代码:

    1. import java.util.Scanner;
    2. public class S5_3 {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. // 从键盘输入字符串
    6. System.out.print("请输入一个字符串:");
    7. String inputString = scanner.nextLine();
    8. // 统计字符个数
    9. int uppercaseCount = 0;
    10. int lowercaseCount = 0;
    11. int digitCount = 0;
    12. int otherCount = 0;
    13. // 遍历字符串中的每个字符
    14. for (char ch : inputString.toCharArray()) {
    15. if (Character.isUpperCase(ch)) {
    16. uppercaseCount++;
    17. } else if (Character.isLowerCase(ch)) {
    18. lowercaseCount++;
    19. } else if (Character.isDigit(ch)) {
    20. digitCount++;
    21. } else {
    22. otherCount++;
    23. }
    24. }
    25. // 输出统计结果
    26. System.out.println("大写字母个数:" + uppercaseCount);
    27. System.out.println("小写字母个数:" + lowercaseCount);
    28. System.out.println("数字个数:" + digitCount);
    29. System.out.println("其他字符个数:" + otherCount);
    30. scanner.close();
    31. }
    32. }

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

    4、字符串缓冲区练习

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

    源代码:

    1. import java.util.Scanner;
    2. public class S5_4_1 {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. // 从键盘输入字符串
    6. System.out.print("请输入一个字符串:");
    7. String inputString = scanner.nextLine();
    8. // 使用StringBuffer进行字符串反转
    9. StringBuffer reversedStringBuffer = new StringBuffer(inputString);
    10. reversedStringBuffer.reverse();
    11. // 输出反转后的字符串
    12. System.out.println("反转后的字符串:" + reversedStringBuffer.toString());
    13. scanner.close();
    14. }
    15. }

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

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

    源代码:

    1. public class S5_4_2 {
    2. public static void main(String[] args) {
    3. // 使用String类进行数组字符串拼接
    4. String[] stringArray = {"Hello", ", ", "world", "!"};
    5. String concatenatedString = concatenateWithString(stringArray);
    6. System.out.println("使用String类拼接的字符串:" + concatenatedString);
    7. // 使用StringBuffer类进行数组字符串拼接
    8. StringBuffer stringBuffer = concatenateWithStringBuffer(stringArray);
    9. System.out.println("使用StringBuffer类拼接的字符串:" + stringBuffer.toString());
    10. }
    11. // 使用String类进行数组字符串拼接
    12. public static String concatenateWithString(String[] array) {
    13. String result = "";
    14. for (String str : array) {
    15. result += str;
    16. }
    17. return result;
    18. }
    19. // 使用StringBuffer类进行数组字符串拼接
    20. public static StringBuffer concatenateWithStringBuffer(String[] array) {
    21. StringBuffer result = new StringBuffer();
    22. for (String str : array) {
    23. result.append(str);
    24. }
    25. return result;
    26. }
    27. }

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

    5、生成验证码

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

    源代码:

    1. import java.util.Random;
    2. import java.util.Scanner;
    3. public class S5_5 {
    4. public static void main(String[] args) {
    5. // 生成验证码
    6. String verificationCode = generateVerificationCode();
    7. System.out.println(verificationCode);
    8. // 提示用户输入验证码
    9. System.out.print("请输入验证码(不区分大小写): ");
    10. Scanner scanner = new Scanner(System.in);
    11. String userInput = scanner.nextLine();
    12. // 验证输入的验证码
    13. if (verifyVerificationCode(userInput, verificationCode)) {
    14. System.out.println("恭喜验证成功!");
    15. } else {
    16. System.out.println("验证失败!");
    17. }
    18. scanner.close();
    19. }
    20. // 生成6位验证码
    21. private static String generateVerificationCode() {
    22. StringBuilder code = new StringBuilder();
    23. Random random = new Random();
    24. for (int i = 0; i < 6; i++) {
    25. // 随机选择数字或字母
    26. int choice = random.nextInt(2);
    27. if (choice == 0) {
    28. // 生成数字
    29. code.append(random.nextInt(10));
    30. } else {
    31. // 生成字母
    32. char randomChar = (char) ('A' + random.nextInt(26));
    33. // 随机选择字母是大写还是小写
    34. if (random.nextBoolean()) {
    35. randomChar = Character.toLowerCase(randomChar);
    36. }
    37. code.append(randomChar);
    38. }
    39. }
    40. return code.toString();
    41. }
    42. // 验证输入的验证码是否匹配
    43. private static boolean verifyVerificationCode(String userInput, String verificationCode) {
    44. return userInput.equalsIgnoreCase(verificationCode);
    45. }
    46. }

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

    6、春节倒计时

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

    源代码: 

    1. import java.time.LocalDateTime;
    2. public class S5_6 {
    3. public static void main(String[] args) throws InterruptedException {
    4. System.out.println("春节倒计时");
    5. System.out.println("距离兔年春节还有");
    6. LocalDateTime newYear = LocalDateTime.of(2023, 1, 21, 0, 0, 0);
    7. LocalDateTime now = LocalDateTime.now();
    8. System.out.println(newYear.getDayOfYear() + (newYear.getYear() - now.getYear()) * 365 - now.getDayOfYear() - 1 + "天");
    9. System.out.print(newYear.getHour() - now.getHour() + 23 + ":");
    10. System.out.print(newYear.getMinute() - now.getMinute() + 59 + ":");
    11. System.out.print(newYear.getSecond() - now.getSecond() + 59);
    12. System.out.println();
    13. }
    14. }

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

    7、二月天

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

    源代码: 

    1. import java.util.Scanner;
    2. public class S5_7 {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. // 提示用户输入年份
    6. System.out.print("请输入年份: ");
    7. int year = scanner.nextInt();
    8. // 判断是否为闰年,并计算二月的天数
    9. int daysInFebruary = isLeapYear(year) ? 29 : 28;
    10. // 输出结果
    11. System.out.println(year + "年的二月有 " + daysInFebruary + " 天。");
    12. scanner.close();
    13. }
    14. // 判断是否为闰年的方法
    15. private static boolean isLeapYear(int year) {
    16. // 闰年的条件:年份能被4整除但不能被100整除,或者能被400整除
    17. return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    18. }
    19. }

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

     

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

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

    源代码: 

    1. import java.util.regex.Matcher;
    2. import java.util.regex.Pattern;
    3. public class S5_8 {
    4. public static void main(String[] args) {
    5. String inputString = "中华人民共和国成立于1949年10月1日";
    6. // 定义正则表达式匹配数字
    7. String regex = "\\d+";
    8. // 编译正则表达式
    9. Pattern pattern = Pattern.compile(regex);
    10. // 创建Matcher对象
    11. Matcher matcher = pattern.matcher(inputString);
    12. // 提取数字并输出
    13. while (matcher.find()) {
    14. String number = matcher.group();
    15. System.out.println("提取的数字:" + number);
    16. }
    17. }
    18. }

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


    三、实验总结 

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

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

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

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

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

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

  • 相关阅读:
    Word文档打开后不能编辑,可以这样处理
    【Linux操作系统】进程信号(二)
    【SLAM】前端-视觉里程计之对极几何
    SMI 与 Gateway API 的 GAMMA 倡议意味着什么?
    计算机毕业设计 基于SSM的垃圾分类管理系统(以医疗垃圾为例)的设计与实现 Java实战项目 附源码+文档+视频讲解
    DNS的背景工作原理和作用
    Java线程池-异步任务编排
    STL算术生成和集合算法
    watch在项目中的使用
    SketchUp Pro 2023 for Mac/Win:重塑设计,引领未来
  • 原文地址:https://blog.csdn.net/wyd_333/article/details/134148279