【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://xiahunao.cn/news/2807516.html

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

相关文章

YOLOv5算法进阶改进(17)— 添加BiFormer注意力机制 | 提升小目标检测精度

前言:Hello大家好,我是小哥谈。本文主要通过对YOLOv5模型添加Bifommer注意力机制为例,让大家对于YOLOv5模型添加注意力机制有一个深入的理解,通过本文你不仅能够学会添加Biformer注意力机制,同时可以举一反三学会其他的注意力机制的添加。🌈 前期回顾: YOLOv5算法进…

神经网络系列---激活函数

文章目录 激活函数Sigmoid 激活函数Tanh激活函数ReLU激活函数Leaky ReLU激活函数Parametric ReLU激活函数 &#xff08;自适应Leaky ReLU激活函数&#xff09;ELU激活函数SeLU激活函数Softmax 激活函数Swish 激活函数Maxout激活函数Softplus激活函数 激活函数 一般来说&#xf…

uni-app nvue vue3 setup中实现加载webview,解决nvue中获取不到webview实例的问题

注意下面的方法只能在app端使用&#xff0c; let wv plus.webview.create("","custom-webview",{plusrequire:"none", uni-app: none, width: 300,height:400,top:uni.getSystemInfoSync().statusBarHeight44 }) wv.loadURL("https://ww…

【深度学习】主要提出者【Hinton】中国大会最新演讲【通往智能的两种道路】

「但我已经老了&#xff0c;我所希望的是像你们这样的年轻有为的研究人员&#xff0c;去想出我们如何能够拥有这些超级智能&#xff0c;使我们的生活变得更好&#xff0c;而不是被它们控制。」 6 月 10 日&#xff0c;在 2023 北京智源大会的闭幕式演讲中&#xff0c;在谈到如…

防御保护--对称加密和非对称加密

目录 发展历程 对称加密 非对称加密算法 发展历程 古典加密技术----算法保密原则 近&#xff0c;现代加密技术 --- 算法公开&#xff0c;密钥保密 对称加密 加密和解密的过程中使用的是同一把密钥。 所以&#xff0c;对称加密所使用的算法一定是一种双向函数&#xff0c;是可…

1.QT简介(介绍、安装,项目创建等)

1. QT介绍 Qt&#xff08;官方发音 [kju:t]&#xff09;是一个跨平台的C开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序 Qt 是纯 C 开发的&#xff0c;正常情况下需要先学习C语言、然后在学习C然后才能使用…

人工智能何时会拥有自由意志?

一、自由意志的来源 人类的自由意志是一个复杂而深奥的概念&#xff0c;它涉及到哲学、心理学、神经科学等多个学科领域。目前并没有一个统一且被广泛接受的答案来完全解释自由意志如何形成&#xff0c;但可以从多个角度探讨其可能性和相关理论&#xff1a; 1. **哲学视角**&…

嵌入式中常见语言对内存管理基本方法

大家好&#xff0c;今天给大家分享一下&#xff0c;从语言角度来讲:对比常见的几种语言对内存的管理方法​。 (1&#xff09;汇编语言:根本没有任何内存管理&#xff0c;内存管理全靠程序员自己&#xff0c;汇编中操作内存时直接使用内存地址&#xff08;譬如0xd0020010 )&…

【黑马程序员】1、TypeScript介绍_黑马程序员前端TypeScript教程,TypeScript零基础入门到实战全套教程

课程地址&#xff1a;【黑马程序员前端TypeScript教程&#xff0c;TypeScript零基础入门到实战全套教程】 https://www.bilibili.com/video/BV14Z4y1u7pi/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 1、TypeScript介绍 1.1 TypeScript是什…

docker安装es与kibana

docker安装es与kibana docker pull elasticsearch:7.11.2 docker network create esnet docker run --name es2 -p 9200:9200 -p 9300:9300 --network esnet -e "discovery.typesingle-node" -d elasticsearch:7.11.2 docker run -d -p 5601:5601 --network e…

【MATLAB】 RLMD信号分解+FFT傅里叶频谱变换组合算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 展示出图效果 1 RLMD分解算法 RLMD&#xff08;Robust Local Mode Decomposition&#xff09;是一种鲁棒的局部模态分解方法。它是通过在局部区间内对信号进行多项式拟合&#xff0c;提取局部特征&#xff0c;进而分解信…

ONLYOFFICE桌⾯应⽤程序v8.0:功能丰富,⽀持多平台

文章目录 可填写的 PDF 表单RTL支持电子表格中的新增功能其他改进和新增功能与 Moodle 集成用密码保护 PDF 文件快速创建文档本地界面主题总结 继 ONLYOFFICE 文档 v8.0 的发布后&#xff0c;很高兴&#xff0c;因为适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序…

qt波位图

1&#xff0c;QPainter 绘制&#xff0c;先绘制这一堆蓝色的东西, 2&#xff0c;在用定时器&#xff1a;QTimer&#xff0c;配合绘制棕色的圆。用到取余&#xff0c;取整 #pragma once#include <QWidget> #include <QPaintEvent>#include <QTimer>QT_BEGIN_…

重磅 | Elasticsearch 智能知识问答上线了

开放搜索智能问答实验室——Elasticsearch 知识问答上线了&#xff0c;诚邀您免费体验Elasticsearch学习应用过程中的对话式答疑。 OpenSearch LLM 智能问答版是阿里云推出的一站式RAG解决方案&#xff0c;内置大语言模型&#xff0c;可基于业务数据搭建企业专属模型&#xff0…

ElasticSearch之聚合aggs

写在前面 本文看下es的聚合相关内容。 1&#xff1a;什么是聚合 即&#xff0c;数据的统计分析。如sum&#xff0c;count&#xff0c;avg&#xff0c;min&#xff0c;max&#xff0c;分组等。 2&#xff1a;支持哪些聚合类型 2.1&#xff1a;bucket aggregation 对满足特…

MySQL--索引结构

索引-索引结构 1. 概述2. 二叉树3. B-Tree4. BTree5. Hash 1. 概述 MySQL的索引是在存储引擎层实现的&#xff0c;不同的存储引擎有不同的索引结构&#xff0c;主要包含以下几种&#xff1a; 上述是MySQL中所支持的所有的索引结构&#xff0c;下面展示不同的存储引擎对于索引…

ElasticSearch索引数据备份与恢复

索引数据备份 在磁盘创建备份目录并授权 # 创建备份目录 /home/esbackup # 授权 chmod 777 /home/esbackup修改配置文件elasticsearch.yml echo path.repo: ["/home/esbackup"] >> /etc/elasticsearch/elasticsearch.yml重启elasticsearch(我是docker创建的…

134 Linux 系统编程11 ,readlink命令,文件目录rwx权限差异,目录操作函数

一 readlink 命令 前面知道&#xff0c;如果a.soft是一个软链接&#xff0c;我们使用 cat a.soft,会直接查看这个软链接指向的文件 那么我们就是想看这个软链接是啥&#xff0c;可以使用 readlink a.soft 二 获取工作目录 getcwd函数 获取进程当前工作目录 (卷3&#xff0c;标…

《艾尔登法环 黄金树幽影》是什么?Mac电脑怎么玩《艾尔登法环》艾尔登法环下载

全体起立&#xff0c;《艾尔登法环 》最新DLC《黄金树幽影》将在6月21日发布&#xff0c;steam售价198元&#xff0c;现在就可以预订了。宫崎英高在接受FAMI通的采访时表示&#xff0c;新DLC的体量远超《黑暗之魂》和《血源诅咒》资料片。好家伙&#xff0c;别人是把DLC续作&am…

Linux:Jenkins:GitLab+Maven+Jenkins的部署——离线包rpm版

Linux&#xff1a;Jenkins&#xff1a;GitLabMavenJenkins的部署&#xff08;1&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136157018?spm1001.2014.3001.5501这个是原版文章&#xff0c;均是使用的在线情况&#xff0c;但是不排除会有离线部署&am…