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

news2024/12/26 23:41:26

*本文是博主对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、对正则表达式有了一个初步的了解。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java 进阶篇】Java Web 开发之 Listener 篇:ServletContextListener 使用详解

欢迎大家来到 Java Web 开发的学习之旅&#xff01;在前面的博客中&#xff0c;我们已经学习了 Servlet、JSP、Filter 等重要的概念和技术。今天&#xff0c;我们将深入探讨 Java Web 开发中另一个重要的组成部分——Listener&#xff08;监听器&#xff09;&#xff0c;具体来…

18 CDN详解

1、理解CDN 1.CDN 和电商系统的分布式仓储系统一样&#xff0c;就近发货给客户(客户端)&#xff0c;所以&#xff0c;必然是提前在仓库中存储了某些商品. 2.CDN最擅长的是缓存静态数据&#xff0c;比如电商系统的热点静态页面&#xff0c;秒杀场景的页面等.问题&#xff1a;向…

Linux学习第37天:Linux I2C 驱动实验(一):哥俩好

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 世界上的很多事物都是成双成对出现的。也包括在驱动开发的过程中&#xff0c;比如I2C中其实就是数据线和时钟线的相互配合才能完成的。 I2C常用于连接各种外设、…

基于SSM的网络音乐系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

【Vue】【uni-app】工单管理页面实现

用的是uni-app的uni-ui拓展组件实现的 功能是对工单进行一个展示&#xff0c;并对工单根据一些筛选条件进行搜索 目前是实现了除了日期之外的搜索功能&#xff0c;测试数据是下面这个tableData.js&#xff0c;都是我自己手写的&#xff0c;后端请求也稍微写了一些&#xff0c;…

Windows上基于Tesseract OCR5.0官方语言库的LSTM字库训练

系列文章目录 Tesseract OCR引擎 文章目录 系列文章目录前言一、LSTM字库训练是什么&#xff1f;二、使用步骤1. 环境准备1.1下载Tesseract 程序并安装1.2下载Tesseract 训练字库1.3下载工具jTessBoxEditor 2. LSTM训练2.1 将要训练的图片(jpg/tif)合并成一个文件2.2 生成box文…

DreamScene2 免费WIndows 动态桌面壁纸播放软件启动无响应失败问题解决及安装使用帮助

高阶使用预览 启动失败场景还原 1. 系统信息 2. 启动错误描述 使用壁纸过程中突然出现异常卡断,使用任务管理器停止程序后,该程序就无法正常启动,点及启动后出现 转圈(任务管理器短暂出现进程) 后就消失不见 原因分析 经过推测后可能是 强制停止后 工作临时缓存目录与启动程序…

2023.11.10联赛 T3题解

题目大意 题目思路 感性理解一下&#xff0c;将一个数的平方变成多个数平方的和&#xff0c;为了使代价最小&#xff0c;这些数的大小应该尽可能的平均。 我们可以将 ∣ b i − a i ∣ |b_i-a_i| ∣bi​−ai​∣放入大根堆&#xff0c;同时将这个数划分的次数以及多划分一段减…

IDEA的这款API调试插件爱了

前言 Idea 是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序,Idea 还具有许多插件和扩展&#xff0c;可以根据开发人员的需要进行定制和扩展&#xff0c;从而提高开发效率,今天我们就来介绍一款…

【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮&#xff0c;如下图所示&#xff1a; 本文介绍如何实现。 FastCAE集成了Python解析器&#xff0c;当单击按钮时&#xff0c;中间用Python执行的&#xff0c;最后调用MainWindow.dll库接口实现的。 具体的Python代码在Python模块的py文件夹下的…

统一消息分发中心设计

背景 我们核心业务中订单完成时&#xff0c;需要完成后续的连带业务&#xff0c;扣件库存库存、增加积分、通知商家等。 如下图的架构&#xff1a; 这样设计出来导致我们的核心业务和其他业务耦合&#xff0c;每次新增连带业务或者去掉连带业务都需要修改核心业务。 一方面&…

linux服务-配置ntp时间服务

参考博文&#xff1a; 如何部署NTP服务器 NTP时间服务器安装部署文档 NTP时间服务器部署以及时间同步设置 Centos7搭建NTP服务器及客户端同步时间 参考文档&#xff1a; GB_T 20520-2006 信息安全技术 公钥基础设施 时间戳规范&#xff1b; GM_T0033-2014 时间戳接口规范&…

芯片静态电流详细测试流程,纯干货分享

在芯片的众多测试项目中芯片的功耗测试可谓重中之重&#xff0c;因为芯片的功耗不仅关系着芯片的整体工作性能也对芯片的工作效率有着非常重大的影响。今天纳米软件就带你了解一下芯片测试项目功耗测试中的静态电流的测试。 01、什么是芯片的静态电流? 芯片的静态电流也叫做…

基于SSM的课程管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

CSS 移动端 1px(线条/边框) 不同机型上显示粗细不同,解决办法

由于不同的手机有不同的像素密度导致的。如果移动显示屏的分辨率始终是普通屏幕的2倍&#xff0c;1px的边框在devicePixelRatio2的移动显示屏下会显示成2px&#xff0c;所以在高清瓶下看着1px总是感觉变胖了 <!DOCTYPE html> <html lang"en"> <head&g…

Git Gui的使用及ssh协议-IEDA使用git

目录 一.Git Gui的使用 二.ssh协议 2.1 什么是ssh key 2.2 配置用户名和邮箱&#xff08;如果已经配置&#xff0c;就跳过&#xff09; 2.3 生成(或删除)秘钥 ​编辑 2.4 远程仓库绑定公钥 三.IEDA使用git 3.1 idea配置Git 3.2 项目上传Git 3.3 演示 一.Git Gu…

使用Java语言实现基本RS触发器

使用Java语言实现计算机程序来模拟基本RS触发器的工作过程&#xff0c;通过本账号2023年10月17日所发布博客“使用Java语言实现数字电路模拟器”中模拟基本逻辑门组成半加器电路的方法来模拟基本触发器的组成和时间延迟。 1 基本RS触发器电路结构 基本RS触发器&#xff08;又…

【入门Flink】- 08Flink时间语义和窗口概念

Flink-Windows 是将无限数据切割成有限的“数据块”进行处理&#xff0c;这就是所谓的“窗口”&#xff08;Window&#xff09;。 注意&#xff1a;Flink 中窗口并不是静态准备好的&#xff0c;而是动态创建——当有落在这个窗口区间范围的数据达到时&#xff0c;才创建对应的窗…

BI 数据可视化平台建设(1)—交叉表组件演变实战

作者&#xff1a;vivo 互联网大数据团队 - Zhu Jianchen 本文是vivo互联网大数据团队《BI数据可视化平台建设》系列文章第1篇 - 交叉表组件。 交叉表在数据分析里应用广泛&#xff0c;通过本文&#xff0c;你将了解到&#xff1a; 交叉表的基本概念&#xff0c;以及BI可视化平…

canal实操应用

一、MySQL的binlog日志 1.1、binlog的分类 binlog一般分为三类&#xff1a;statement语句级&#xff0c;记录一条一条的SQL&#xff0c;一条SQL可能更改多行&#xff0c;且SQL语句中如果用到now()函数或者random()函数&#xff0c;会存在数据不一致的问题。row行级&#xff0…