当前位置: 首页 > news >正文

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

相关文章:

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

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

自媒体项目详述

总体框架 本项目主要着手于获取最新最热新闻资讯&#xff0c;以微服务构架为技术基础搭建校内仅供学生教师使用的校园新媒体app。以文章为主线的核心业务主要分为如下子模块。自媒体模块实现用户创建功能、文章发布功能、素材管理功能。app端用户模块实现文章搜索、文章点赞、…...

客服呼叫中心的语音质检工作

语音质检是呼叫中心运营中必不可缺少的一个环节&#xff0c;呼叫中心语音质检对坐席起着直接监督的作用&#xff0c;也正是这种监督约束推动着客服人员不断提升自身的业务能力。 而客服呼叫中心的质检结果中还蕴藏了大量有价值的信息&#xff0c;可以通过日常的质检工作真正发现…...

深度解密 | 灵脉SAST 3.0最新特性曝光

一、多模智能引擎焕新 2023年6月&#xff0c;灵脉SAST入选国际权威咨询机构Forrester发布的《The Static Application Security Testing Landscape》报告成为全球范围内仅有的两款亚太区SAST代表产品之一。 此次3.0版本重大焕新&#xff0c;灵脉SAST从检测工具的灵魂核心入手…...

NowCode JZ39 数组中出现次数超过一半的数字 简单

题目 - 点击直达 1. JZ39 数组中出现次数超过一半的数字 简单1. 题目详情1. 原题链接2. 题目要求3. 基础框架 2. 解题思路1. 思路分析2. 时间复杂度3. 代码实现 1. JZ39 数组中出现次数超过一半的数字 简单 1. 题目详情 1. 原题链接 NowCode JZ39 数组中出现次数超过一半的数…...

【SA8295P 源码分析 (一)】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数

【SA8295P 源码分析】119 - QNX 中如何在代码中快速配置 TLMM_GPIO 或 PMIC_GPIO 中断 及 中断回调函数 一、配置 TLMM GPIO15 中断示例代码二、配置 PMIC2 GPIO1 中断示例代码三、easy_irq 实现源码分析3.1 struct _easy_irq_ctx 结构体内容分析3.2 register_easy_irq_callbac…...

电大搜题:开启智能学习新时代

尊敬的读者朋友们&#xff0c;今天我将向您介绍一款能够让您轻松搜题、高效学习的神奇工具&#xff1a;电大搜题&#xff01;作为湖北开放大学和广播电视大学的学习者&#xff0c;您一定对于繁重的课业和复杂的试题感到头疼。但是&#xff0c;现在有了电大搜题微信公众号&#…...

19、Flink 的Table API 和 SQL 中的自定义函数及示例(4)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…...

Vue23-props配置功能

Vue2&3-props配置功能 Vue2-props配置 功能&#xff1a;接收从其他组件传过来的数据&#xff0c;将数据从静态转为动态注意&#xff1a; 同一层组件不能使用props&#xff0c;必须是父组件传子组件的形式。父组件传数据&#xff0c;子组件接收数据。不能什么数据都接收&a…...

怎样使用ovsyunlive在web网页上直接播放rtsp/rtmp视频

业务中需要在网页中直接播放rtsp和rtmp视频&#xff0c;多方比较测试发现ovsyunlive的播放器能直接播放rtsp/rtmp视频&#xff0c;还是非常方便简洁&#xff0c;使用过程如下&#xff1a; 1&#xff0c;Windows系统在github上面下载ovsyunlive绿色包下载解压。 github地址&am…...

MySQL | 查询接口性能调优、编码方式不一致导致索引失效

背景 最近业务反馈&#xff0c;列表查询速度过慢&#xff0c;需要优化。 到正式环境系统去验证&#xff0c;发现没筛选任何条件的情况下&#xff0c;查询需要三十多秒&#xff0c;而筛选了条件之后需要13秒。急需优化。 先说结论&#xff1a;连表用的字段编码方式不一致导致索…...

ASUS华硕灵耀X2 Duo UX481FA(FL,FZ)_UX4000F工厂模式原装出厂Windows10系统

下载链接&#xff1a;https://pan.baidu.com/s/1sRHKBOyc3zu1v0qw4dSASA?pwd7nb0 提取码&#xff1a;7nb0 带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、MyASUS华硕电脑管家等预装程序所需要工具&#xff1a;16G或以上…...

企业安全—三保一评

0x00 前言 本篇主要是讲解三保一评的基础知识&#xff0c;以及对为什么要进行这些内容的原因进行总结。 0x01 整体 1.概述 三保分别是&#xff0c;分保&#xff0c;等保&#xff0c;关保。 分保就是指涉密信息系统的建设使用单位根据分级保护管理办法和有关标准&#xff0c…...

“深入理解机器学习性能评估指标:TP、TN、FP、FN、精确率、召回率、准确率、F1-score和mAP”

目录 引言 分类标准 示例&#xff1a;癌症检测 1. 精确率&#xff08;Precision&#xff09; 2. 召回率&#xff08;Recall&#xff09; 3. 准确率&#xff08;Accuracy&#xff09; 4. F1-score 5. mAP&#xff08;均值平均精度&#xff09; 总结与通俗解释 引言 机器…...

Linux软件包(源码包和二进制包)

Linux下的软件包众多&#xff0c;且几乎都是经 GPL 授权、免费开源&#xff08;无偿公开源代码&#xff09;的。这意味着如果你具备修改软件源代码的能力&#xff0c;只要你愿意&#xff0c;可以随意修改。 GPL&#xff0c;全称 General Public License&#xff0c;中文名称“通…...

Leetcode-394 字符串解码(不会,复习)

此题不会&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 题解思路&#xff1a;元组思想&#xff1a;数字[字符串]&#xff0c;每次遇到中括号意味着要重复数字次字符串…...

如何在Linux上搭建本地Docker Registry并实现远程连接

Linux 本地 Docker Registry本地镜像仓库远程连接 文章目录 Linux 本地 Docker Registry本地镜像仓库远程连接1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址…...

assets_common.min.js

assets_common.min.js odoo将零散的js文件主要打包成了两个文件&#xff0c;分别是web.assets_common.min.js 和web.assets_backend.min.js&#xff0c; 我们分别看看这两个文件里都有些啥&#xff1f; common.js最先加载&#xff0c;看看里面都有些啥 1、boot.js 定义了od…...

前端工程化(vue2)

一、环境准备 1.依赖环境&#xff1a;NodeJS 官网&#xff1a;Node.js 2.脚手架&#xff1a;Vue-cli 参考网址&#xff1a;安装 | Vue CLI 介绍&#xff1a;Vue-cli用于快速的生成一个Vue的项目模板。主要功能有&#xff1a;统一的目录结构&#xff0c;本地调试&#xff0…...

深度学习(生成式模型)——Classifier Guidance Diffusion

文章目录 前言问题建模条件扩散模型的前向过程条件扩散模型的反向过程条件扩散模型的训练目标 前言 几乎所有的生成式模型&#xff0c;发展到后期都需要引入"控制"的概念&#xff0c;可控制的生成式模型才能更好应用于实际场景。本文将总结《Diffusion Models Beat …...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

DingDing机器人群消息推送

文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人&#xff0c;点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置&#xff0c;详见说明文档 成功后&#xff0c;记录Webhook 2 API文档说明 点击设置说明 查看自…...