版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
人民邮电出版社9常用实用类Java程序设计第章导读Introduction本章介绍Java基础类库中一些常用的基础类,包括字符串类与正则表达式、数学类、日期和日历类、及包装类。掌握这些常用类,可以有效地提高编程效率,提高程序的稳定性。C目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6Object类9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.7System类9.8小结9.1.1字符串处理问题【例9.1】编写一个用于统计给定字符串中大写字母数的方法。Example9_01.java
Java中用于字符串处理的类主要包括String、StringBuffer、StringTokenizer、StringBuilder、StreamTokenizer。【例9.2】编写一方法从一给定字符串中删去指定子串。Example9_02.java(字符串类的常用方法见表9.1)9.1.2字符串类1.String类用String类定义的字符串是不可变长度字符串。对字符串可进行求串长度、返回子字符串、计算某子串的位置、判断两个字符串是否相等、字符串的比较、包含和连接等处理。用StringBuffer类定义的字符串是可变长度字符串。可以借助具体的方法对其进行包括字符串尾部追加、插入、内容替换、字符串中删除子串、字符串倒序、返回缓冲区容量等处理。2.StringBuffer类9.1.2字符串类3.String与StringBuffer区别构造方法不同:String创建的字符串是常量,创建后不能改变;而StringBuffer创建的是缓冲区,其字符串可以改变。成员方法不同:String类的成员方法以只读数据为主,而StringBuffer的成员方法则可以读写字串。9.1.2字符串类4.StringTokenizer类有时需要将组成一个字符串的子串分别提取出来,例如将一个英文句子中的各个单词分别提取出来,StringTokenizer类可用于完成此类处理。【例9.3】使用StringTokenizer类的对象将一个英文句子中的各个单词提取出来。Example9_03.java9.1.3StringBuilder类StringBuilder是JDK1.5推出的类。它与StringBuffer很相似。在单线程情况下使用它要比使用String和StringBuffer执行效率高。这个类定义在System.text包中。其用法和StringBuffer基本相同。9.1.4StreamTokenizer类StringTokenizer用于字符串的拆分有很大的局限性,主要问题是方法少,用于解析多行文本组成的文本文件时功能较弱。
StreamTokenizer定义了几种常量用于标识解析过程:TT_EOF(流结尾)、TT_EOL(行结尾)、TT_NUMBER(数字符号,0123456789)、TT_WORD(一个单词)。该类定义在java.io包中。9.1.4StreamTokenizer类【例9.4】StreamTokenizer应用例程。Example9_04.javaStreamTokenizer的常用方法下页续表9.1.4StreamTokenizer类9.1.5使用Scanner解析字符串利用Scanner类的对象可以从字符串读取数据。如果从字符串中读数据则应采用下面的形式实例化一个Scanner类的对象:Scannerinput=newScanner(字符串对象);【例9.5】有一个购物清单:电视机3200.00元,智能手机2200.00元,笔记本4200.00元,午餐120.25元统计该次购物共花费多少?Example9_05.javaC目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6Object类9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.7System类9.8小结9.2.1
正则表达式1.
正则表达式的概念正则表达式使用一个字符串来描述、匹配一系列符合某个句法规则的字符串。正则表达式使用元字符和特殊字符来描述字符串的组成。2.正则表达式的语法正则表达式主要包括元字符、特殊字符和限定符。一个正则表达式就是用这三种符号组成的。元字符、特殊字符和限定符如表9.5、9.6和9.7所示。9.2.1
正则表达式2.正则表达式的语法正则表达式中可以用方括号将多个字符括起来表示一个元字符:[abc]表示a、b、c中的任何一个字符;[^abc]表示除a、b、c之外的任何字符;[a-c]表示a至c的任何一个字符;[a-c[m-t]]表示a至c或m至t中的任何字符;[a-j&&[i-k]]表示i、j之中的任何一个字符;[a-k&&[^ab]]表示c-k中任何一个字符。9.2.1
正则表达式2.正则表达式的语法下面是几个常用的正则表达式:验证Email地址:"\\w{1,}@\\w{1,}\56\\w{1,}";验证电话号码:"^(\\d{3,4})?-\\d{7,8}$";验证身份证号(15位或18位数字):"^\\d{15}|\\d{18}$";只能输入数字:"^[0-9]*$";只能输入n位的数字:"^\\d{n}$"。【例9.6】用正则表达式验证标识符的合法性。定义标识符的规则是,第1个字符必须是字母、$、下划线或汉字,其后的字符可以是字母、数字、$、下划线或汉字。Example9_06.java9.2.2Pattern类和Matcher类
java.util.regex.Pattern和java.util.regex.Matcher是用于模式匹配的类,模式对象封装了正则表达式。Matcher对象方法则主要针对匹配结果进行处理,下面用代码段示例说明。Stringregex=“[a-z]at”;Stringstr=“afatcatandaratwereeatingoatinthevat.”;Patternp=Ppile(regex);Matcherm=p.matcher(str);while(m.find())//find()判断m中是否存在与regex匹配的子串{Strings=m.group();//group()返回匹配的子串System.out.println(s);}C目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6小结9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.3数学计算与数学类数学计算是程序的基本任务。Java中有几个类和数学计算有密切关系,包括Math(数学类)、Random(随机数类)、BigInteger(大整型数类)、NumberFormat(数据格式类)、DecimalFormat(小数格式类)、Formatter(格式化器类)。用这些类可以完成一些数据的计算与格式化。【例9.7】计算1!+3!+5!+7!+……前30项之和Example9_07.java9.3数学计算与数学类Math类主要进行常用的数学计算,如取绝对值abs()、求最大值max()、求最小值min()、产生随机数random()、乘幂pow()、平方根sqrt()、对数log()、三角函数运算等。此外,类中还定义了自然对数底数和圆周率两个常数。Math类的所有属性和方法都是静态的,所以可直接通过Math类名访问相应的成员,如Math.PI、Math.E、Math.sqrt(2)、Math.sin(Math.toRadians(30))等。9.3数学计算与数学类Random类主要用于产生随机数,它的主要方法包括nextBoolean()、nextBytes()、nextDouble()、nextInt()、nextInt(intn)、nextLong()、setSeed()等,其中nextInt(intn)方法可以生成指定范围0到n(包括0和不包括n)的随机整数。NumberFormat、DecimalFormat和Formatter类主要用于控制数值数据的输出格式。【例9.8】用Formatter定义输出格式。程序代码详见Example9_08.java。C目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6Object类9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.7System类9.8小结9.4.1日期类Date在Java中可以使用日期类Date和日历类Calendar进行时间和日期数据的处理。Date类在包java.util中,常用方法如下表所示。返回类型方法名功能booleanafter(Dated)测试此日期是否在指定日期之后booleanbefore(Dated)测试此日期是否在指定日期之前intcompareTo(Dated)比较两个日期的顺序longgetTime()返回自格林尼治GMT1970年1月1日00:00:00以来此Date对象表示的毫秒数9.4.2日历类Calendar日历类Calendar也在java.util包中定义,常用方法如下表所示。9.4.2日历类Calendar【例9.11】俗话说,“三天打鱼,两天晒网”。某渔民从2010年1月1日起,连续打三天鱼,然后休息两天,再连续打三天鱼,再休息两天,……,一起重复这个劳作过程。问,从2010年1月1日起的某一天,该渔民是在打鱼,还是在休息。代码详见Example9_11.java9.4.3本地时间类Java8之前,处理日期时间的类是Date、Calendar,这两个类在使用起来很不方便,如Date类月份计算是从0开始。不仅不支持时区,代码繁琐、性能低,并且还不是线程安全的。在JDK8发布的时候,推出了LocalDate、LocalTime、LocalDateTime这个三个时间处理类,以此来弥补之前的日期时间类的不足,简化日期时间的操作9.4.3本地时间类LocalDate——不包含具体时间的日期。它可以用来存储生日,入职日期等。LocalTime——它代表的是不含日期的时间。LocalDateTime——它包含了日期及时间,不过还是没有偏移信息或者说时区。LocalDateTime可以设置年月日时分秒,相当于LocalDate+LocalTime。ZonedDateTime——这是一个包含时区的完整的日期时间,偏移量是以UTC/格林威治时间为基准的。LocalDate的常用方法://调用now()函数获取今天的日期LocalDatetoday=LocalDate.now();//调用getDayOfMonth()获取今天是几号intdayofMonth=today.getDayOfMonth();//取本月最后一天,再也不用计算是28,29,30还是31:LocalDatelastDayOfThisMonth=today.with(TemporalAdjusters.lastDayOfMonth());//2022-02-28C目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6Object类9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.7System类9.8小结9.5包装类
Java为其8个基本数据类型设计的对应类统称为包装类(WrapperClass)。类中封装了基本类型数据运算所需的属性值和转换方法,弥补了基本类型数据没有面向对象特征之不足。这8个类都定义在java.lang包中,包括Byte、Short、Character、Integer、Long、Float、Double和Boolean。下表所示是Integer类的属性和常用方法,其他类有相似名字的方法,这些方法不在此列出。9.5包装类Integer类的属性和常用方法
9.5包装类
如用整型类的对象表示整型数123,则可以写成:
Integeri=Integer.valueOf(123);可以调用方法intValue()得到整型类对象表示的整型数,表达式Value()的值就是一个整型数。为了便于在基本类型数据和包装类对象之间进行数据变换,Java有自动装箱(Autoboxing)和自动拆箱(Unboxing)操作。如下面的语句:
Integeri=10;10是一个基本数类型,将其赋给i前用Integer.valueOf(10)自动生成一个Integer的对象然后再赋给i。将基本类型数据自动转换成对应包装类的对象的过程称为自动装箱。
9.5包装类
i是一个整型数的对象,则在下面的语句中
intt=i;i和t不是同一类型,在赋值前,可以用Value()得到i所表示的整型数后再赋给整型变换t。这种直接将包装类的对象自动转换成对应的基本数据类型数据的过程称为自动拆箱。同样地,表达式i*2先将i自动拆箱得到整型数后再与2相乘。如果将一个数字字符串转换成对应的数值型数,则可以调用类方法parseXXX()。如将字符串“123”转换成对应的整型数123,则可以用表达式:Integer.parseInt(“123”)C目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6Object类9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.7System类9.8小结
9.6Object类
Object类是所有类的祖先类,Java的所有类都直接或间接继承了Object类。Object类可以显式继承,也可以隐式继承,以下两种方式时,其结果是一样的:显式继承:publicclassTeacherextendsObject{}隐式继承:publicclassTeacher{}
C目录ONTENTS9.2正则表达式与字符串处理9.3数学计算与数学类9.6Object类9.1字符串处理与字符串类9.4日期和日历类9.5包装类9.7System类9.8小结
9.7System类
System类代表程序所在系统提供了对应的一些系统属性信息和系统操作。系统级的很多属性和控制方法都放置在该类的内部。System中包含了in、out和err三个成员变量,分别代表标准输入流(键盘输入)、标准输出流(显示器)和标准错误输出流(显示器)。publicfinalstaticIn
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025如何写借款合同范文
- 二零二五年度个人房屋贷款保证合同3篇
- 2025农村水库承包合同书
- 2025地板供货标准合同范本
- 二零二五年度车辆租赁行业信用体系建设协议4篇
- 2025年度个人债务额度担保债务转移合同范本4篇
- 二零二五年度主题公园餐饮茶点服务外包合同3篇
- 2025版土地买卖居间代理合同细则2篇
- 二零二五年度草料市场分析与销售代理合同3篇
- 二零二四年生态旅游区病虫害防治与景区管理合同3篇
- 《电力用直流电源系统蓄电池组远程充放电技术规范》
- 《哪吒之魔童降世》中的哪吒形象分析
- 信息化运维服务信息化运维方案
- 汽车修理厂员工守则
- 六年级上册数学应用题100题
- 个人代卖协议
- 公安交通管理行政处罚决定书式样
- 10.《运动技能学习与控制》李强
- 冀教版数学七年级下册综合训练100题含答案
- 1神经外科分级护理制度
- 场馆恶劣天气处置应急预案
评论
0/150
提交评论