




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、07.与运行环境交互本章要点Java程序的参数获取键盘输入System类与Runtime类使用字符串Math、Random、BigDecimal、Date等工具类的用法正则表达式国际化支持Java程序的参数如果运行Java程序时在类名后紧跟一个或多个字符串(多个字符串之间以空格隔开),JVM就会把这些字符串依次赋给args数组元素。 如果某参数本身包含了空格,则应该将该参数用双引号()括起来,否则JVM会把这个空格当成参数分隔符,而不是当成参数本身。 使用Scanner获取键盘输入 使用Scanner类可以很方面地获取用户的键盘输入,Scanner是一个基于正则表达式的文本扫描器,它可以从文件
2、、输入流、字符串中解析出基本类型值和字符串值。Scanner类提供了多个构造器,不同的构造器可接受文件、输入流、字符串作为数据源,用于从文件、输入流、字符串中解析数据。Scanner主要提供了两个方法来扫描输入:hasNextXxx():是否还有下一个输入项,其中Xxx可以是Int、Long等代表基本数据类型的字符串。如果需要判断是否包含下一个字符串,则可以省略Xxx。nextXxx():获取下一个输入项。Xxx的含义与前一个方法中Xxx相同。使用BufferedReader读取键盘BufferedReader是Java IO流中的一个字符、包装流,它必须建立在另一个字符流的基础之上。但标准输
3、入:System.in是字节流 ,程序需要使用转换流InputStreamReader将其包装字符流。 使用BufferedReader可以逐行读取用户的键盘输入,每次用户的键盘输入都被BufferedReader当成String对象。与Scanner不同的是,BufferedReader不能读取基本类型输入项,它总是读取String对象。System类System类代表当前Java程序的运行平台,程序不能创建System类的对象,所以它提供了一些类属性和类方法,允许直接通过System类名来调用这些属性和方法。System类提供了代表标准输入、标准输出和错误输出的类属性;并提供了一些静态方法
4、用于访问环境变量、系统属性的方法;还提供了加载文件和动态链接库的方法。下面程序通过System类来访问操作的环境变量和系统属性。 Runtime类Runtime类代表Java程序的运行时环境,每个Java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连。应用程序不能创建自己的Runtime实例,但可以通过getRuntime()方法获取与之关联的Runtime对象。Runtime类代表Java程序的运行时环境,可以访问JVM的相关信息,如处理器数量,内存信息等。 除此之外,Runtime还有一个功能:它可以直接单独启动一条进程来运行操作系统的命令。Object类O
5、bject类是所有类、数组、枚举类的父类,也就是说,Java允许把所有任何类型的对象赋给Object类型的变量。当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认继承Object父类。对象“克隆”Object还提供了一个protected修饰的clone()方法,程序员可重写该方法来实现“浅克隆”。自定义类实现“浅克隆”的步骤:(1)自定义类实现Cloneable接口。(2)自定义类实现clone()方法。(3)在clone()方法中通过super.clone()调用Object的clone()方法来实现“浅克隆”。Java 7新增的Objects类Objects提供了一些
6、工具方法来操作对象。比如:hashCode():返回指定对象的hashCode值。toString:返回指定对象的“描述性”字符串。requiredNonNull:检查对象是否为null。String、StringBuffer和StringBuilder字符串就是一连串的字符序列,Java提供了String和StringBuffer两个类来封装对字符串,并提供了系列方法来操作字符串对象。String类是不可变类的,StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append、insert、reverse、s
7、etCharAt、setLength等方法可以改变这个字符串对象的字符序列。一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString方法将其转换为一个String对象。JDK1.5又新增了一个StringBuilder类,它也代表了字符串对象。StringBuilder是线程不安全的。无处不在的字符串使用String对象存储字符串String类位于java.lang包中,具有丰富的方法计算字符串的长度连接字符串比较字符串提取字符串 频繁使用的字符串 “有志者事竟成 ” “离奥运会开幕还有380天” “教育改变生活”String s = 有志者事竟成;String
8、s = new String(有志者事竟成);字符串比较equals()方法比较原理输入的“Java”和“java”代表同一课程,如何解决?使用equalsIgnoreCase()方法结合toUpperCase()或toLowerCase()字符串 1字符串 2检查组成字符串内容的字符是否完全一致字符串比较使用equalsIgnoreCase()方法解决比较时忽略大小写形式if(favCourse1.equalsIgnoreCase(favCourse2) System.out.println(最喜欢的课程相同); else System.out.println(最喜欢的课程不相同); 字符串
9、比较结合toUpperCase()方法Java使用 toUpperCase( ) 方法JAVAJava使用 toLowerCase( ) 方法javaif(favCourse1.toUpperCase().equals(favCourse2.toUpperCase() System.out.println(最喜欢的课程相同);else System.out.println(最喜欢的课程不相同);字符串连接2-2方法1:使用“+”方法2:使用String类的concat()方法你好,张三!String s = new String(你好,);String name = new String(张三
10、!);String sentence = s.concat(name);System.out.println(sentence);输出结果A.concat(B):B字符串将被连接到A字符串后面字符串提取方法常用提取方法举例方法说明public int indexOf(int ch) 搜索第一个出现的字符ch(或字符串value)public int indexOf(String value)public int lastIndexOf(int ch) 搜索最后一个出现的字符ch(或字符串value)public int lastIndexOf(String value)返回出现第一个匹配的位置
11、, 如果没有找到字符或字符串,则返回-1青春无悔0 1 2 3 位置字符串提取方法方法说明public String substring(int index)提取从位置索引开始的字符串部分public String substring(int beginindex, int endindex)提取beginindex和endindex之间的字符串部分public String trim()返回一个前后不含任何空格的调用字符串的副本beginindex: 字符串的位置从0开始算;endindex: 字符串的位置从1开始算 StringBufferStringBuffer:String增强版Str
12、ingBuffer声明StringBuffer的使用StringBuffer sb = new StringBuffer();StringBuffer sb = new StringBuffer(aaa);创建空字符串创建一个变量存储字符串aaasb.toString(); /转化为String类型sb.append(*); /追加字符串StringBuffer的用武之地 /声明课程信息字符串 StringBuffer course = new StringBuffer(); System.out.println(请输入课程信息: ); Scanner sc = new Scanner(Sys
13、tem.in); /循环从键盘接收字符串 String input; while(!(input = sc.next().equals(#) course.append(input); course.append(n); System.out.println(课程信息是: + course);定义StringBuffer的实例,存储课程字符串循环追加字符,使用StringBuffer,效率高!从控制台接收课程信息,不断累加直到输入“#”键结束,并输出全部课程信息 Math类 Java提供了基本的+、-、*、/、%等基本算术运算的运算符,但对于更复杂的数学运算,例如三角函数、对数运算、指数运算等
14、则无能无力。Java提供了Math工具类来完成这些复杂的运算。Math类是一个工具类,它的构造器被定义成private的,因此无法创建Math类的对象;Math类中所有方法都是类方法,可以直接通过类名来调用它们。 Random与ThreadLocalRandom Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子,另一个构造器需要程序员显式传入一个long型整数的种子。相对于Math的random()方法而言,Random类的提供了更多方法来生成各种伪随机数,它不仅可以生成浮点类型的伪随机数,也可以生成整数类型的伪随机数,还可以指定生成随机数的范围。ThreadL
15、ocalRandom是Java 7新增的,它可以在多线程环境下代替Random减少多线程资源竞争,从而提供更好的线程安全。BigDecimal类float、double两种基本浮点类型的浮点数容易引起精度丢失。果程序中需要对double浮点数进行加、减、乘、除基本运算,则需要先将double类型数值包装成BigDecimal对象,调用BigDecimal对象的方法执行运算后再将结果转换成double型变量。Date类 Java提供了Date类来处理日期、时间。Date类从JDK1.0起就开始存在了。但正因为它历史悠久,所以它的大部分构造器、方法都已经过时,不再推荐使用了。 Calendar类
16、因为Date类的设计上存在一些缺陷,Java提供了Calendar类来更好地处理日期和时间。Calendar是一个抽象类,它用于表示日历。Calendar本身是一个抽象类,它是所有日历类的模板,并提供了一些所有日历通用的方法,但它本身不能直接实例化。程序只能创建Calendar子类的实例,Java 本身提供了一个GregorianCalendar类,一个代表Gregorian Calendar的子类,它代表了我们通常所说的公历。开发者可以开发自己的Calendar子类。Java 8新增的日期、时间包 Java 8专门新增了一个java.time包,该包下包含了如下常用的类:Clock:该类用于
17、获取指定时区的当前日期、时间。该类可取代System类的currentTimeMillis()方法,而且该类提供了更多方法来获取当前日期、时间的方法。该类提供了大量静态方法来获取Clock对象。Duration:该类代表持续时间。该类可以非常方便地获取一段时间Instant:代表一个具体的时刻,它可以精确到纳秒。该类提供了静态的now()方法来获取当前时刻,也提供了静态的now(Clock clock)获取clock对应的时刻。除此之外,它还提供了系列minusXxx()方法在当前时刻基础上减去一段时间,也提供了plusXxx()方法在当前时刻基础上加上一段时间。LocalDate:该类代表不
18、带时区的日期。例如2007-12-03。该类提供了静态的now()方法来获取当前日期,也提供了静态的now(Clock clock)获取clock对应的日期。除此之外,它还提供了minusXxx()方法在当前年份基础上减去几年、几月、几周或几日等,也提供了plusXxx()方法在当前年份基础上加上几年、几月、几周或几日等。LocalTime:该类代表不带时区的时间,例如10:15:30。该类提供了静态的now()方法来获取当前时间,也提供了静态的now(Clock clock)获取clock对应的时间。除此之外,它还提供了minusXxx()方法在当前年份基础上减去几小时、几分、几秒等,也提供
19、了plusXxx()方法在当前年份基础上加上几小时、几分、几秒等。LocalDateTime:该类代表不带时区的日期、时间,例如2007-12-03T10:15:30。该类提供了静态的now()方法来获取当前日期、时间,也提供了静态的now(Clock clock)获取clock对应的日期、时间。除此之外,它还提供了minusXxx()方法在当前年份基础上减去几年、几月、几日、几小时、几分、几秒等,也提供了plusXxx()方法在当前年份基础上加上几年、几月、几日、几小时、几分、几秒等。MonthDay:该类仅代表月日。例如-04-12。该类提供了静态的now()方法来获取当前月日,也提供了静
20、态的now(Clock clock)获取clock对应的月日。Year:该类仅代表年。例如2014。该类提供了静态的now()方法来获取当前年份,也提供了静态的now(Clock clock)获取clock对应的年份。除此之外,它还提供了minusYears()方法在当前年份基础上减去几年,也提供了plusYears()方法在当前年份基础上加上几年。YearMonth:该类仅代表年月。例如2014-04。该类提供了静态的now()方法来获取当前年月,也提供了静态的now(Clock clock)获取clock对应的年月。除此之外,它还提供了minusXxx()方法在当前年月基础上减去几年、几月
21、,也提供了plusXxx()方法在当前年月基础上加上几年、几月。DayOfWeek:这一个枚举类,定义了周日到周六的枚举值。Month:这也是一个枚举值,定义了一月到十二月的枚举值 String类的正则表达式支持boolean matches(String regex):判断该字符串是否匹配指定正则表达式。String replaceAll(String regex, String replacement):返回该字符串中所有匹配正则表达式的子串替换成replacement后的新字符串String replaceFirst(String regex, String replacement):返
22、回该字符串中第一个匹配正则表达式的子串替换成replacement后的新字符串String split(String regex):根据给定正则表达式的拆分该字符串后得到的字符串数组。创建正则表达式 表达式就是一个字符串模板,可以匹配一批字符串,所以创建正则表达式就是创建一个特殊的字符串。 正则表达式所支持的合法字符 x 字符 :x(x可代表任何合法的字符)0mnn:8进制数0mnn所表示的字符xhh:16进制值0 xhh所表示的字符uhhhh:16进制值0 xhhhh所表示的UNICODE字符t :制表符(u0009)n :新行(换行)符(u000A)r :回车符(u000D)f :换页符(
23、u000C)a :报警(bell)符(u0007)e : Escape符(u001B)cx:对应的的控制符。例如,cM :匹配Ctrl-M。x值必须为A-Z或a-z之一。正则表达式中的特殊字符 $:匹配一行的结尾。要匹配 $ 字符本身,请使用 $。:匹配一行的开头。要匹配 字符本身,请使用 。( ):标记子表达式的开始和结束位置。要匹配这些字符,请使用 ( 和 )。 :用于确定中括号表达式的开始和结束位置,要匹配这些字符,请使用 和 。 :用于标记前面子表达式的出现频度,要匹配这些字符,请使用 和 。*:指定前面子表达式可以出现零次或多次。要匹配 * 字符,请使用 *。+:指定前面子表达式可以
24、出现一次或多次。要匹配 + 字符,请使用 +。?:指定前面子表达式可以出现零次或一次。要匹配 ? 字符,请使用 ?。.:匹配除换行符 n之外的任何单字符。要匹配 .,请使用 .。用于转义下一个字符,或指定八进制、十六进制字符。如果需匹配 ,请用|:指定两项之间任选一项,如果要匹配 | ,请使用 |。预定义字符 .:可以匹配任何字符d:匹配09的所有数字D:匹配非数字。s:匹配所有空白字符,包括空格、制表符、回车符、换页符、换行符等。S:匹配所有非空白字符。w:匹配所有单词字符,包括09所有数字,26个英文字母和下划线(_)。W:匹配所有非单词字符。使用正则表达式 一旦在程序中定义了正则表达式之
25、后,就可以使用Pattern和Matcher来使用正则表达式。Pattern对象是正则表达式的编译后在内存中的表示形式,因此,正则表达式字符串必须先被编译为Pattern对象,然后再利用该Pattern对象创建对应的Matcher对象。执行匹配所涉及的状态保留在Matcher对象中,多个Matcher对象可共享同一个Pattern对象。 Java国际化的思路 Java程序的国际化的思路是将程序中的标签,提示等信息放在资源文件中,程序需要支持哪些国家、语言环境,就需要提供相应的资源文件。资源文件是key-value对,每个资源文件中的key是不变的,但value则随不同国家、语言改变。 国际化支
26、持Java程序的国际化主要通过如下三个类完成:java.util.ResourceBundle:用于加载一个国家、语言资源包。java.util.Locale:用于封装一个特定的国家/区域、语言环境。java.text.MessageFormat:用于格式化带占位符的字符串。使用类文件代替资源文件使用Java文件来代替资源文件的Java文件必须满足如下条件:类的名字必须为baseName_language_country,这与属性文件的命名相似该类必须继承ListResourceBundle,并重写getContents方法,该方法返回Object数组,该数组的每一个项都是key-value
27、对。处理带占位符的消息此时需要使用MessageFormat类,该类包含一个有用的静态方法:format(String pattern , Object. values):返回后面的多个参数值填充前面的pattern字符串,其中pattern字符串不是正则表达式,而是一个带占位符的字符串。 使用NumberFormat格式化NumberFormat和DateFormat都包含了format和parse方法,其中format用于将数值、日期格式化成字符串,parse用于将字符串解析成数值、日期。NumberFormat也是一个抽象基类,所以无法通过它的构造器来创建NumberFormat对象,它
28、提供了如下几个工厂方法来得到NumberFormat对象:getCurrencyInstance:返回默认Locale的货币格式器。也可以在调用该方法传入指定Locale,则获取指定Locale的货币格式器。getIntegerInstance:返回默认Locale的整数格式器。也可以在调用该方法传入指定Locale,则获取指定Locale的整数格式器。getNumberInstance:返回默认Locale的通用数值格式器。也可以在调用该方法传入指定Locale,则获取指定Locale的通用数值格式器。getPercentInstance:返回默认Locale的百分数格式器。也可以在调用该方法传入指定Locale,则获取指定Locale的百分数格式器。使用DateFormat 与NumberFormat相似的是,DateFormat也是一个抽象类,它也提供了几个工厂方法用于获取DateFormat对象:getDateInstance:返回一个日期格式器,它格式化后的字符串只有日期,没有时间。该方法可以传入多个参数,用于指定日期样式和Locale等参数。如果不指定这些参数,则使用默认参数。get
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 明达职业技术学院《计量学与互换性基础俄》2023-2024学年第二学期期末试卷
- 西南民族大学《供应链系统仿真与优化》2023-2024学年第二学期期末试卷
- 郑州智能科技职业学院《建筑设计初步》2023-2024学年第二学期期末试卷
- 内蒙古丰州职业学院《城市公共景观设计》2023-2024学年第二学期期末试卷
- 上海交通大学《城市社会工作》2023-2024学年第二学期期末试卷
- 展馆空间设计项目效益评估报告
- 山东财经大学《分析化学实验2》2023-2024学年第二学期期末试卷
- 和君职业学院《护理礼仪》2023-2024学年第二学期期末试卷
- 滨州学院《GPS》2023-2024学年第二学期期末试卷
- 桂林信息科技学院《成瘾医学》2023-2024学年第二学期期末试卷
- 2025年房屋交易代持策划协议书
- 课题申报参考:“四新”建设背景下教育创新与课程数字化实践研究
- 2025年上半年赣州市于都县招聘城管协管员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年江苏农牧科技职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2024年世界职业院校技能大赛高职组“市政管线(道)数字化施工组”赛项考试题库
- 大学生职业素养课件-5第五单元学会有效沟通-PPT课件
- 《谈骨气》课文阅读(共2页)
- 病原生物与免疫学(中职)绪论PPT课件
- 新起点小学英语一年级上册单词卡片(共23页)
- 译林版五下英语1-3单元电子稿
- 节后复工安全温馨提示
评论
0/150
提交评论