【Java】常用实用类及java集合框架(实验六)

目录

一、实验目的

二、实验内容

三、实验小结

3.1 常用实用类

3.2 Java集合框架


一、实验目的

1、掌握java常用类的方法

2、掌握String类与数值类型数据的相互转化

3、掌握正则表达式的应用

4、掌握常用集合的创建和操作方法

二、实验内容

1、菜单的内容如下:“北京烤鸭:189元,西芹炒肉:12.9元,酸菜鱼:69元,铁板牛柳:32元。”编写一个JAVA应用程序,输入菜单内容,然后输出菜单中的价格数据,并计算出菜单的总价格。

源代码:

实验运行截图:

2、利用DateFormat、Date、Calendar等相关类,编程实现如下功能:(1)用户输入2个日期,第一个日期用整数形式输入,把输入的整数设置为日历对象1的年月日的值。第二个日期以字符串形式输入,形如“2022-10-25”,并设置为日历对象2的年月日的值。将2个日期以“xx年xx月xx日”的格式输出。

(2)程序判断并输出第二个日期表示的时间是该年度第几周、第几天;

(3)判断并输出2个日期的大小关系,以及2个日期之间的间隔天数。

算法描述及实验步骤:

(1)①先创建两个SimpleDateFormat格式化对象用来将用户输入的字符串日期解析为Date对象的日期形式。

②创建两个Calendar类的实例对象并通过Calendar类的setTime( )方法将解析过的两个Date对象分别封装到两个日历对象中。

③最后通过创建一个格式化的SimpleDateFormat类的对象并调用其format( )方法来将用户输入的两日期以指定日期格式字符串输出。

(2)①将日历对象调用get( )方法并传入Calendar类的相关枚举常量来获取当年日期是第几周和第多少天。

(3)①通过使用Calendar类的compareTo( )方法来比较两日期的大小关系。

②两日历对象通过调用Calendar类的getTimeInMillis()方法来分别获取各自的197011日以来到该日期的毫秒数。然后将其相减就可以获得两日期之间相差了多少毫秒。最后将两日期相差的毫秒数转化为天数并输出(一天24 小时、1小时60分钟、1分钟60秒、11000毫秒即days=(tim2-time1)/(24*60*60*1000)

 源代码:

 实验运行截图:

3、写一个彩票程序:随机生成9个随机数(100~999之间)模拟该期彩票号码,注意不能重复,存入集合中。然后从键盘输入3个数模拟用户购买号码。程序对集合进行遍历,对比3个数是否与集合中的数有相同的。最后显示该期彩票号码、用户号码以及“中了几个号”,如果中了3个号,显示一等奖;如果中了2个号,显示二等奖;如果中了1个号,显示三等奖。要求:选用合适的容器和算法。(说明:键盘输入可以使用Scanner类)

源代码:

实验运行截图:

三、实验小结

3.1 常用实用类

String类:

1、创建String类的对象有三种方式分别是:new String(“字符串”)、new String(字符数组名)、new String(字节数组名)。字符串对象也可以调用string.getChars(字符串开始下标,字符串结束下标,目的字符数组名,目的字符数组下标)方法,来将字符串中的部分字符赋值给指定字符数组。

2、String类对象常用方法:

string.length()-------获取字符串长度

string.equals(“字符串”)------判断两字符串是否相等。两字符串变量之间使用关系运算符比较的是各自保存的地址引用的大小而不是字符串之间的比较。

string.compareTo(“字符串”)------根据字符串的编码从左到右依次比较每个字符的大小,类似C语言的strcmp()函数。

string.startsWith(“字符串”)-------判断string字符串是否以参数所指的字符串开头。

string.endsWith(“字符串”)--------判断string字符串是否以参数所指的字符串结束。

string.contains(“字符串”)----------判断String字符串是否包含参数所指的字符串。

string.indexOf(“字符串”)---------获取参数所指字符串在String原字符串出现的下标位置。

string.substring(开始下标,结束下标)----------获取String字符串指定下标之间的字串。

String.trim(“字符串”)--------将String字符串前后的空格去掉并以新字符串的形式返回。

3、将数字字符串转化为基本数值类型需要导入java.lang包中的相应基本数据类如:Integer整数类、Double小数类等,然后调用各自的parseInt( )等方法将其转化为指定的数值类型返回。

4、数值型转化为相应字符串有两种方法:String.valueOf(数值)或通过“+”与字符串做并置运算。

5、Integer类或long类调用其类方法toBinaryString(整数)等可以将其指定整数转化为相应进制的字符串返回。

6、我们在使用println(object)等函数打印对象的内容时,其背后解释器会自动调用对象继承或重写object类的toString( )方法并将其返回值作为对象打印输出的结果。

正则表达式:

1、 

        .-------表示任意一个字符

         \\.-----单纯表示一个.

         \\d-----表示一个0-9的数字字符

         \\D-----表示任意一个非数字的字符

         \\s------表示一个空格或2个tab键

         \\S------表示任意一个非空格字符

         \\w------表示一个普通字符如数字、字母、下划线

         \\W-----表示任意一个非普通字符即特殊字符如%、@、!等

         \\p{Punct}-----表示一个标点符号

         [^a-aA-Z0-9]----表示中括号各字符之外的任意一个字符,^表示取反。

2、

        *--------前一个字符匹配任意次

         ?---------前一个字符至多匹配1次

         +---------前一个字符至少匹配1次

         {n}-------前一个字符必需匹配n次

         {n,}------前一个字符至少匹配n次

         {n,m}----前一个字符至少匹配n次、至多匹配m次即n~m次。

         字符串---前一个字符的后缀是字符串

         x|y--------要么匹配的是x要么是y

3、

        String.matches(“正则表达式”)判断String字符串是否完全匹配正则表达式,返回真假。

        String.replaceAll(“正则表达式”, ”替换字符串”)将String字符串匹配正则表达式的所有字串替换为参数二所指字符串。

        

分割字符串: 

1、分割字符串有三种方法:

        1.1使用字符串的string.split(“正则表达式”)方法,将string字符串以正则表达式匹配的字串作为分割符,来切割原字符串并以字符数组的形式返回切割后的字符数组的首地址。

        1.2通过创建StringTokenizer类的对象如:new StringTokenizer(“字符串”,”分割字符”)来将字符串以指定分割字符进行切割并将其保存到StringTokenizer类的对象中。其对象通过调用nextToken()方法来逐个获取分割后的各字符串,调用hasMoreTokens()来判断对象中是否还有剩余的分割后的字符串,通过countTokens()来获取对象中剩余的分割字符串个数。

        1.3通过创建Scanner类的对象如:new Scanner(“字符串”),来调用useDelimiter(“正则表达式”)来将对象封装的字符串进行按正则匹配的结果作为分割符进行切割字符串,并将切割后的字符串保存到对象中。对象调用next()方法可以逐个获取切割的字符串、使用hasNext()方法来判断对象中分割字符串是否读取完了。

模式匹配:

通过使用java.util.regex包中的Pattern类与Matcher类可以对指定字符串进行正则表达式检索。其步骤为:

  1. 创建一个需要被正则检索的文本字符串。
  2. 通过调用Pattern.compile(regex)方法来创建Pattern类的模式对象。
  3. 模式对象通过调用matcher(“文本字符串”)方法来创建一个Matcher类的对象即确定要匹配的文本字符串。
  4. 最后,Matcher的对象通过调用各方法来检索文本字符串。如:find()、lookingAt()从左向右检索与正则匹配模式匹配的字符串等。

StringBuffer类:

         String类创建的字符串不能被修改,而使用StringBuffer类创建的对象其封装的字符串可以通过StringBuffer类的对象调用类中的各方法来对对象中的原字符串进行修改。例如:StringBuffer类的对象通过调用append(“字符串”)方法可以将参数所指字符串追加到对象中封装的原字符串后面。

日期与时间:

1、java.time包中有专门操作日期时间的三个类如:LocalDate只封装年月日、LocalDateTime封装年月日时分秒纳秒、LocalTime只封装时间。其三种类的使用基本是相似的如:

new LocalDateTime.now()-------获取本地日期时间的LocalDateTime类的对象。

new LocalDateTime.of(年,月,日,时,分,秒,纳秒)------返回指定日期时间的LocalDateTime类的对象。

2、对象常用方法:

object.getYear()------返回年

object.getMonthValue()-------返回月

object.getDayOfMonth()-------返回日

object.getHour()-------返回时

object.getMinute()------返回分

object.getSecond()-------返回秒

object.getNano()--------返回纳秒

object.getDayOfWeek()-----返回周

object.getDayOfYear()-------返回当年第几天

object.isLeapYear()-------判断是否为润年

object.plusMonths(int months)------当前日期增加months个月后的新日期对象作为返回值

object.compareTo(日期对象)-------比较日期大小,年、月、日从左到右依次比较。

3、计算时间差:

在使用日期类的对象调用until(日期对象2,ChronoUnit.DAYS)方法,来获取两日期之间的时间差之前需要导入java.time.temporal.ChronoUnit类。其中ChronoUnit.DAYS表示获取两日期相差多少天、ChronoUnit.MONTHS表示相差多少日、ChronoUnit.YEARS表示相差多少年(不足相差一个时间单位的按0计算)

4、通过String类直接调用format(“%tY-%<tm-%<td %<tA  %<tH:%<tM:%<tS:%<tN”,日期类对象), 返回日期格式化后的日期字符串。

Math类与Random类

1、Match类可以直接调用如下方法:

Match.sqrt(double a)-------对a开平方根

Match.ceil(double a)--------返回大于或等于a的最小整数即向上取整

Match.floor(double a)-------返回小于或等于a的最小整数即向下取整

Match.round(double a)-----对a进行四舍五入保留整数部分(如果a为负数则小数部分小于或等于0.5舍弃、大于0.5入)。

2、使用new Random()创建的随机数对象,通过调用nextInt(int m)方法来返回[0,m)区间的随机整数。调用nextDouble()方法返回[0.0, 1)区间的随机小数。调用nextBoolean()返回随机的真假值。

Class类与反射:

1、所谓反射就是使用另个类的对象来操作获取当前类的成员变量和方法。默认情况下任何类包括用户自定义的类都会隐藏着一个类变量即Class类的class对象,里面封装着当前类的一些信息如:类名、成员变量、构造方法、和普通方法。

2、任何类的Class变量对象调用class.getName( )获取类名字符串信息、Constructor[] getDeclaredConstructors()返回类的全部构造方法声明、Field[] getDeclaredFields()返回类的全部成员变量、Method[] getDeclaredMethods( )返回类的全部方法。

3、创建一个类的对象有两种形式。一种使用new方法、另一种使用Class类的与任何类都相关的class对象。其方法如下:

        3.1 先得到和要实例化的类相关的class对象如:Class.forName(类名),通过类名获取隐藏在该类下的class对象变量。

        3.2 获取要实例化的类的无参构造方法如:Construct<?>=class.getDeclaredConstructor();

        3.3 最后construct<?>对象调用调用newInstance()方法来将类实例化并将创建的对象返回。

Arrays数组类与System类和Console类:

1、java.util包中的数组类可以直接调用其类中的类方法来操作数组。如:Arrays.sort(数组名)对数组升序排序、Arrays.BinarySearch(数字组名,插找的元素)二分查找指定元素等。Arrays.copyOf(原素数组,拷贝元素数)拷贝原数组指定个数元素到一个新数组中并返回新数组的首地址。

2、System.nanoTime()方法返回计算机从1970年1月1日起至今的纳秒。System.out.exit(状态码)退出程序。System.gc()手动进行垃圾回收。

3、Console类可用于实现用户在命令行输入的文本肉眼不可见。即先通过System类直接调用console()方法来返回一个Console类的对象,然后通过Console类的对象调用readPassword()方法读取用户在键盘上输入的一行肉眼不可识别的文本,并将文本以char字符数组返回。

3.2 Java集合框架

泛型:

1、所谓泛型即任意数据类型。由泛型定义的变量或方法可以接收或返回任意的指定类型的数据对象。

形式:class 类名<泛型列表如:E,K >{

         类体

}

2、用泛型类声明或创建对象时必须指定泛型列表中的泛型所代表的具体数据类型;类实现泛型接口时也要具体指定泛型接口中的泛型所代表的具体数据类型。

链表:

1、用LinkedList<E>泛型类创建的链表对象的各节点是由:“数据域+上节点地址,下节点地址”组合构成的双向链表。可以在链表的任意位置插入或删除数据对象。

2、链表对象常用方法有:

        2.1 void add(int index,E obj)向链表的指定位置添加新节点对象obj;省略第一个参数表示在链表的后面追加节点对象并返回真假。

        2.2 void clear()删除当前链表的所有节点使其成为空链表。

        2.3 remove(int index | E obj)删除指定位置上的节点或指定对象在链表中首次出现的节点。

        2.4 E get(int index)获取链表中指定位置的节点对象。

        2.5 E set(int index ,E obj)将当前链表中指定位置上的数据替换为实参指定的对象,并返回被替换的数据对象。

        2.6 int size()返回链表的节点个数即长度。

        2.7 object clone()获得当前链表的克隆链表(两个链表结点数据变化互不影响)

        2.8 boolean contains(object obj)判断当前链表中是否含有实参指定的节点对象。使用此方法之前必须保证当前列表的节点对象的类实现了equals(object o)判断对象是否相等的方法。

3、链表对象可以使用iterator()方法来获取当前链表的迭代器对象,然后使用迭代器对象的hasNext()方法判断链表中是否还有节点每读取完、使用next()方法获取链表下个节点对象。

堆栈:

1、使用Stack<E>泛型类可以创建一个堆栈对象。堆栈中添加的第一数据对象会被放下“桶”

的最低端,后面添加的数据对象直接摞在前一个添加的数据对象上面。堆栈中的数据对象尊循“先进后出、后进先出”。

2、堆栈对象使用push(E item)方法向栈中添加数据、pop()方法将栈中的数据对象弹出返回并删除、empty()方法判断堆栈中是否还有数据返回真假、search(object data)方法获取对象在堆栈中的位置(堆栈最顶端的位置为1,往下递增),没有返回-1。

散列映射:

1、使用HashMap<key,value>泛型类来创建散列映射对象即字典,用来存储键值对。通常用来存储经常查询的数据、可以减少检索开销。

2、散列映射中存储的值的键不能相同,否则将会发生值的替换。

3、散列映射对象使用push(K key,V value)方法向散列映射对象中添加键值对数据;使用get(Object key)方法获取键在散列对象中所对应的值;使用remove(Object key)方法删除散列映射对象中相应的键值对数据。

树集:

1、所谓树集就是以倒挂树的形式来组织存储节点数据对象的集合。树集中的节点所存储的对象的类必须是实现了Comparable接口的类,只有这样树集才能根据节点对象中的compareTo()方法对各节点进行升序排列(树集各节点从上到下层递增、同层从左到右递增)。

2、使用TreeSet(E)泛型类创建树集对象。用树集创建的对象其各节点对象依据某个属性实现了自动升序排序。

树映射:

1、树映射与树集类似,只不过树映射各节点存放的是键值对即保存的是“对象地址+关键字”;并且树映射各节点是以各节点中的键来进行升序排列的。

2、使用TreeMap()泛型类来创建树映射对象。

集合:

1、使用HashSet<E>泛型类创建集合对象来存储元素对象。集合中的元素是无序排列的、且元素对象不能重复。

2、集合对象使用add(obj)方法向其集合中添加元素对象、使用remove(Object 0)方法删除集合中指定的元素对象、使用size()方法获取集合中的元素对象个数。

3、集合对象使用addAll(HashSet set)方法对两个集合进行并运算并将结果作用于原集合对象。retainAll(HashSet set)方法将两个集合对象进行并运算,结果同样作用于原集合。removeAll(HashSet set)方法实现两个集合对象进行差运算(去掉另个集合中的元素后所剩下的元素),并将结果作用于原集合。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

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

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

相关文章

南邮概率统计与随机过程练习册答案

**南京邮电大学** **概率统计与随机过程练习册答案简介** 本文档是一份精心整理的南京邮电大学概率统计与随机过程课程的练习册答案集。它旨在为学习该课程的学生提供一个详尽的解题参考,帮助他们更好地理解和掌握概率论与统计学的基本概念和方法。 **内容概览:** - **章节…

抖音视频评论数据提取软件|抖音数据抓取工具

一、开发背景&#xff1a; 在业务需求中&#xff0c;我们经常需要下载抖音视频。然而&#xff0c;在网上找到的视频通常只能通过逐个复制链接的方式进行抓取和下载&#xff0c;这种操作非常耗时。我们希望能够通过关键词自动批量抓取并选择性地下载抖音视频。因此&#xff0c;为…

git 拉取远程分支到本地

背景&#xff1a; 我的 github 上的远程仓库上除了 main 分支外还提交了好几个别的分支&#xff0c;现在我换机器了&#xff0c;git clone 原仓库后只剩 main 分支&#xff0c;我要把其他分支拉下来到本地。 1. 查看所有远程remote分支 git branch -r 比如我这里&#xff1…

深入浅出:探究过完备字典矩阵

在数学和信号处理的世界里&#xff0c;我们总是在寻找表达数据的最佳方式。在这篇博文中&#xff0c;我们将探讨一种特殊的矩阵——过完备字典矩阵&#xff0c;这是线性代数和信号处理中一个非常有趣且实用的概念。 什么是过完备字典矩阵&#xff1f; 首先&#xff0c;我们先…

LeetCode 2610.转换二维数组

给你一个整数数组 nums 。请你创建一个满足以下条件的二维数组&#xff1a; 二维数组应该 只 包含数组 nums 中的元素。 二维数组中的每一行都包含 不同 的整数。 二维数组的行数应尽可能 少 。 返回结果数组。如果存在多种答案&#xff0c;则返回其中任何一种。 请注意&…

多数元素

169. 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&…

docker用法

首先需要去docker官网注册你的账号&#xff0c;记住账号名称和密码&#xff1b; 然后在本地执行&#xff1a; docker login登录OK。 把ubuntu下载到本地&#xff1a; sudo docker pull ubuntusudo docker images输出&#xff1a; REPOSITORY TAG …

认识K8S

K8S K8S 的全称为 Kubernetes (K12345678S) 是一个跨主机容器编排工具 作用 用于自动部署、扩展和管理“容器化&#xff08;containerized&#xff09;应用程序”的开源系统。 可以理解成 K8S 是负责自动化运维管理多个容器化程序&#xff08;比如 Docker&#xff09;的集群…

278.【华为OD机试真题】寻找最优的路测线路(二分查找—JavaPythonC++JS实现)

🚀点击这里可直接跳转到本专栏,可查阅顶置最新的华为OD机试宝典~ 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目-寻找最优的路测线路二.解题思路三.题解代码Pyt…

unity学习(40)——创建(create)角色脚本(panel)——UI

1.点击不同的头像按钮&#xff0c;分别选择职业1和职业2&#xff0c;create脚本中对应的函数。 2.调取inputfield中所输入的角色名&#xff08;限制用户名长度为7字符&#xff09;&#xff0c;但愿逆向的服务器可以查重名&#xff1a; 3.点击头衔&#xff0c;显示选择的职业&a…

【小程序】应用程序编程接口能力汇总——网络API(一)

ty.request 获取网络请求任务对象 RequestTask 参数 Object object 发起 HTTPS 网络请求的回调函数 回调参数 Object res 属性类型默认值必填说明urlstring是开发者服务器接口地址datastring否请求的参数headerany否设置请求的 header&#xff0c;header 中不能设置 Refe…

第二十篇文章——谈谈我的感受

一.契机 很早以前&#xff0c;我就使用了CSDN&#xff0c;并从很多大佬的文章中学到了很多的知识&#xff0c;当我再次从C语言开始&#xff0c;从走编程之路的时候&#xff0c;我思考&#xff1a;为什么不能把我再次学习的所思所感记录下来呢&#xff1f;因此&#xff…

vite 项目提示 Buffer is not defined 问题解决

问题 在 vite 搭建的 vue3 项目中使用 Buffer 对象报错 Buffer is not defined 原因 出现这个问题的原因是因为页面运行在浏览器中&#xff0c;而浏览器中并没有 Buffer 对象&#xff0c;Buffer 对象是 Node 中的。 解决方法 1、安装 buffer 插件 npm install buffer 2、…

SpringBootWeb请求响应

SpringBootWeb请求响应 这里写目录标题 SpringBootWeb请求响应前言1. 请求1.1 Postman1.1.1 介绍1.1.2 安装 1.2 简单参数1.2.1 原始方式1.2.2 SpringBoot方式1.2.3 参数名不一致 1.3 实体参数1.3.1 简单实体对象1.3.2 复杂实体对象 1.4 数组集合参数1.4.1 数组1.4.2 集合 1.5 …

代码随想录算法训练营|day42

第九章 动态规划 416.分割等和子集代码随想录文章详解 背包类型求解方法0/1背包外循环nums,内循环target,target倒序且target>nums[i]完全背包外循环nums,内循环target,target正序且target>nums[i]组合背包外循环target,内循环nums,target正序且target>nums[i] 416.分…

前端解析后端返回文件流格式数据

当后端接口返回数据是一个文件流数据时&#xff0c;如下后端返回给我的是一个pdf文件流数据 methods: {gotoPri() {protocolApi().then(res > {this.createPdf(res.data,XXX协议)})},createPdf(res, name) {// Blob构造函数返回一个新的 Blob 对象并指定type类型。let blob …

js设计模式:外观模式

作用: 将复杂的功能封装成可以简单调用的方法,无需知道内部的具体逻辑,只需要知道怎么去使用 类似于一把枪,你可以不知道内部的枪机,击发机,复进簧,枪管,导气装置,弹夹是怎么合作配合完成发射和自动填弹,你只需要知道你扣动扳机就能完成这一系列复杂的操作,而那个扳机就是外观…

抛弃for循环遍历list

Java 8 API添加了一个新的抽象称为流Stream&#xff0c;可以让你以一种声明的方式处理数据。 Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。 filter filter&#xff1a;过滤&#xff0c;就是过滤器&#xff0c;符合…

k8s学习笔记-基础概念

&#xff08;作者&#xff1a;陈玓玏&#xff09; deployment特别的地方在于replica和selector&#xff0c;docker根据镜像起容器&#xff0c;pod控制容器&#xff0c;job、cronjob、deployment控制pod&#xff0c;job做离线任务&#xff0c;pod大多一次性的&#xff0c;cronj…

pstree命令

pstree 是一个在类 Unix 系统中广泛使用的命令行工具&#xff0c;主要用于以树状结构可视化当前系统中进程之间的关系。这个命令显示的是进程间的父子关系&#xff0c;从一个初始进程&#xff08;通常是 init 或 systemd&#xff09;开始&#xff0c;逐级展示每个进程及其子进程…