《Java程序设计教学做一体化教程第6章字符串日期与数学公式.ppt》由会员分享,可在线阅读,更多相关《Java程序设计教学做一体化教程第6章字符串日期与数学公式.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、注意:开始用功了注意:开始用功了!配合例子源代码一起使用例子源代码一起使用Power point 制作:耿祥义 张跃平字符串、日期与数学公式字符串、日期与数学公式 Java程序设计教学做一体化教程程序设计教学做一体化教程 第第6章章主要内容主要内容6.1字符串对象字符串对象 核心知识核心知识 _11字符串字符串 常量对象常量对象 字符串常量对象是用双引号括起的字符序列,例如字符串常量对象是用双引号括起的字符序列,例如你好你好、12.97、boy等等.字符串对象字符串对象 使用使用String类创建字符串对象,例如:类创建字符串对象,例如:String s=new String(we are s
2、tudents);创建了一个字符串对象创建了一个字符串对象s 引用字符串常量对象引用字符串常量对象 字字符符串串常常量量是是对对象象,因因此此可可以以把把字字符符串串常量的引用赋值给一个字符串对象,例如常量的引用赋值给一个字符串对象,例如 string s1,s2;s1=how are you;s2=how are you;这这样样,s1,s2具具有有相相同同的的引引用用,因因而而具具有有相同的实体。相同的实体。s1、s2内存示意如图内存示意如图6.1。6.1.1 核心知识核心知识 _22String类的常用方法类的常用方法 public int length()字符串调用length()方法
3、返回当前字符串的长度。public boolean equals(String s)字符串调用该方法比较当前字符串是否与参数s指定的字符串的相同。public boolean startsWith(String s)字符串对象调用startsWith(String s)方法判断当前字符串的前缀是否是参数s指定的字符串;调用endsWith(String s)方法判断一个字符串的后缀是否是字符串。public int compareTo(String s)字符串调用该方法按字典序与参数s指定的字符串比较大小。public boolean contains(String s)字符串调用该方法判断当
4、前字符串是否含有参数指定的字符串s。public int indexOf(String s)字符串调用该方法从当前字符串的头开始检索字符串s,并返回首次出现s的索引位置(索引从0开始),如果没有检索到字符串s,该方法返回的值是-1。public String substring(int startpoint)字符串调用该方法获得一个当前字符串的子串,该子串是从当前字符串的startpoint处截取到最后所得到的字符串。public String trim()字符串s通过调用方法trim()得到一个字符串对象,该字符串对象是s去掉前后空格后的字符串。更多方法见更多方法见page113.page1
5、13.6.1.2 能力目标能力目标 掌握掌握String类的常用方法类的常用方法。6.1.3 任务驱动 将将下下列列Application6_1.java中中的的【代代码码】替替换换为为程程序序代代码码。程序运行效果如图程序运行效果如图6.26.2。任务小结任务小结 关系表达式tom=boy和tom.equals(boy)的意义有很大的不同.tom、boy中存放的是引用,内存示意如图6.3所示。那么tom=boy比较的是对象的引用,不是对象的实体,而字符串对象调用public boolean equals(String s)是比较当前字符串对象的实体与参数s的实体是否相同。另外,需要注意的是J
6、ava把String类声明为final类,因此用户不能扩展String类,即String类不可以有子类 6.1.4 实践环节 阅读、调试下列程序,注意排序字符串的阅读、调试下列程序,注意排序字符串的sort方法。方法。SortString.java Application6_2.java 6.2 6.2 字符串与数组字符串与数组 6.2.1 核心知识核心知识_11 1用数组构造字符串用数组构造字符串 可用构造方法String(char a)提取字符数组a中的全部字符构造一个字符串对象,如:char a=J,a,v,a;String s=new String(a);上述过程相当于:String
7、s=new String(Java);也可用构造方法String(char String(char a,int a,int startIndex,int startIndex,int count)count)提提取取字符数组a中的一部分字符创建一个字符串对象,参数startIndex和count分别指定在a中提取字符的起始位置和从该位置开始截取的字符个数,例如:char a=char a=零零,壹壹,贰贰,叁叁,肆肆,伍伍,陆陆,柒柒,捌捌,玖玖;String s=new String(a,2,4);String s=new String(a,2,4);相当于 String s=new Str
8、ing(String s=new String(贰叁肆伍贰叁肆伍););6.2.1 核心知识核心知识 _22将字符串中的字符放入数组中将字符串中的字符放入数组中 字符串使用方法:public void getChars(int start,int end,char c,int offset)public void getChars(int start,int end,char c,int offset)将当前字符串中从位置start到end-1位置上的字符复制的数组c中,并从数组c的offset处开始存放这些字符。字符串调用该方法:public char toCharArray()public
9、 char toCharArray()返回一个字符数组,该数组的长度与字符串的长度相等、第i单元中的字符刚好为当前字符串中的第i个字符。public public byte byte getBytes()getBytes()方法使用平台默认的字符编码,将当前字符串转化为一个字节数组。假设机器的默认编码是GB2312。字符串Java你你好好调调用用getBytesgetBytes()()返回一个字节数组d,其长度为8。6.2.2 能力目标能力目标 将字符串放入数组中,返回字符串的字节数组(默认编码)。6.2.3 任务驱动将下列将下列Application6_3.java中的【代码】替换为程序代码
10、。中的【代码】替换为程序代码。程序运行效果如图程序运行效果如图6.46.4。任务任务 小结小结String类的构造方法String(byte)用指定的字节数组构造一个字符串对象。另外,byte getBytes(String charsetName)使用参数指定字符编码,将当前字符串转化为一个字节数组。如果平台默认的字符编码是:GB_2312(国标,简体中文),那么调用getBytes()方法等同于调用getBytes(GB2312)。6.2.4 实践环节 阅读、调试下列代码,并用你熟悉的加密算法修改代码中的加密算法。EncryptAndDecrypt.java Application6_4.
11、java 6.3 6.3 字符串转化为数字字符串转化为数字 6.3.1 核心知识核心知识_11Integer类中的类中的parseInt方法方法 java.lang包中的Integer类调用其类方法(static方法):public static int parseInt(String s)可以将由“数字”字符组成的字符串,转化为int型数据,例如:int x;String s=876;x=Integer.parseInt(s);6.3.1 核心知识核心知识 _2trycatch语句的格式如下:try 包含可能发生异常的语句catch(ExceptionSubClass1 e)catch(Ex
12、ceptionSubClass2 e)2处理异常处理异常 所所谓谓异异常常就就是是程程序序运运行行时时可可能能出出现现的的一一些些错错误误。ParseInt方方法法可可以以将将“数数字字”格格式式的的字字符符串串,转转化化为为int型型数数据据,但但是是当当试试图图将将字字符符串串ab89转转换换成成数数字字时时,例例如如:int number=Integer.parseInt(ab89);方方法法parseInt()在在执执行行过过程程中中就就会会 抛抛 出出 NumberFormatException对对 象象,即即 程程 序序 运运 行行 出出 现现NumberFormatExcepti
13、on异常,并立刻停止异常,并立刻停止parseInt()方法的执行。方法的执行。Java使使用用trycatch语语句句来来处处理理异异常常,将将可可能能出出现现的的异异常常操操作作放放在在trycatch语语句句的的try部部分分,一一旦旦try部部分分抛抛出出异异常常对对象象,或或调调用用某某个个可可能能抛抛出出异异常常的的方方法法,并并且且该该方方法法抛抛出出了了异异常常对对象象,那那么么try部部分分将将立立刻刻结结束束执执行行,而而转转向向执执行行相相应应的的catch部分。所以程序可以将发生异常后的处理放在部分。所以程序可以将发生异常后的处理放在catch部分。部分。各各个个cat
14、ch参参数数中中的的异异常常类类都都是是Exception的的某某个个子子类类,表表明明try部部分分可可能能发发生生的的异异常常,这这些些子子类类之之间间不不能能有有父父子子关关系系,否否则则保保留留一一个个含含有有父父类类参数的参数的catch即可。即可。6.3.2 能力目标能力目标 字符串转换为数字,并能处理异常情况。6.3.3 任务驱动 将下列Application6_5.java中的【代码】替换为程序代码。程序运行效果如图程序运行效果如图6.56.5。任务任务 小结小结(1)使用java.lang包中的Byte、Short、Long、Float、Double类调相应的类方法:publ
15、ic static byte parseByte(String s)throws NumberFormatExceptionpublic static short parseShort(String s)throws NumberFormatExceptionpublic static long parseLong(String s)throws NumberFormatExceptionpublic static float parseFloat(String s)throws NumberFormatExceptionpublic static double parseDouble(Str
16、ing s)throws NumberFormatException可以将由“数字”字符组成的字符串转化为相应的基本数据类型。(2)可以使用String 类的下列类方法:public static String valueOf(byte n)public static String valueOf(int n)public static String valueOf(long n)public static String valueOf(float n)public static String valueOf(double n)将形如123、1232.98等数值转化为字符串,如:String
17、str=String.valueOf(12313.9876);6.3.4 实践环节 应应用用程程序序中中的的mainmain方方法法中中的的参参数数argsargs能能接接受受用用户户从从键键盘盘键键入入的的字字符符串串。比比如如,假假设设主主类类是是ApplicationApplication,如如下下使使用用解解释释器器java.exejava.exe来来执执行行主主类类(在在主主类类的的后后面面是是空空格格分分隔隔的的若若干干个个字字符符串串):java Application 78.86 12 25 125 98 这这 时时,程程 序序 中中 的的 args0args0、arg1arg
18、1、arg2arg2、arg3arg3和和args4args4分分别别得得到到字字符符串串“78.8678.86”、“1212”、“2525”、“125125”和和“9898”。上上机机调调试试下下列列代代码码,运运行行程程序序时时,需需要要在在命命令令行行给给出出mainmain方方法中参数数组法中参数数组argsargs每个单元中的字符串,例如:每个单元中的字符串,例如:java Application 190 212 298 562 785 Application.java 6.4 6.4 正则表达式 6.4.1 核心知识核心知识_1 1 1正则表达式正则表达式 一个正则表达式是含有一些
19、具有特殊意义字符的字符串,这些特殊字符称作正则表达式中的元字符。1)1)用用斜斜线线格格式式构构成成元元字字符符。比如,dcat中的d就是有特殊意义的元字符,代表0到9中的任何一个。表6.1列出了常用的元字符及其意义。2)2)用用中中括括号号格格式式构构成成的的元元字字符符。可以用方括号扩起若干个字符来表示一个元字符,该元字符代表方括号中的任何一个字符。例如regex=159ABC,那么1ABC、5ABC和9ABC都是和正则表达式regex匹配的字符串。3 3)元元字字符符的的修修饰饰符符。在正则表达式中可以使用限定修饰符。比如,对于限定修饰符:?,如果X代表正则表达式中的一个元字符或普通字符
20、,那么X?就表示X出现0次或1次(X+表示X出现至少1次),例如:regex=hello2468?;那么hello,hello2,hello4,hello6和hello8都是与正则表达式regex匹配的字符串。表6.2给出了常用的限定修饰符的用法.6.4.1 核心知识核心知识 _2 2 2字符串的替换字符串的替换 字符串对象调用:public String replaceAll(String regex,String replacement)方法返回一个字符串,该字符串是将当前字符串中所有和参数regex指定的正则表达式匹配的子字符串用参数replacement指定的字符串替换后的字符串,例如
21、:String s=12hello567bird.replaceAll(a-zA-Z+,你好);那么s就是将12hello567bird中所有英文子串替换为你好后得到的字符串,即s是:12你好567你好。注:当前字符串调用replaceAll()方法返回一个字符串,但不改变当前字符串。表表6.1 元字符元字符 表表6.2 限定符限定符 6.4.2 能力目标能力目标 能使用正则表达式以及replaceAll()方法返回一个字符串。6.4.3 任务驱动将Application6_6.java中的【代码】替换为程序代码。程序运行效果如图程序运行效果如图6.66.6。任务任务 小结小结由于“.”代表任
22、何一个字符,所以在正则表达式中如果想使用普通意义的点字符,必须使用.或用56表示普通意义的点字符.例如,任务中的【代码1】:0123456789.+;中的“.”就表示普通意义的“点”字符。6.4.4 实践环节 上机调试下列程序掌握上机调试下列程序掌握StringString类的类的splitsplit方法。方法。Application6_7.javaApplication6_7.java 6.5 6.5 分解字符串 6.5.1 核心知识核心知识 分析字符串并将字符串分解成可被独立使用的单词,这些单词叫做语言符号。当分析一个字符串并将字符串分解成可被独立使用的单词时,可以使用java.util包
23、中的StringTokenizer类,该类有两个常用的构造方法:(1)StringTokenizer(String s)为字符串s构造一个分析器。使用默认的分隔标记,即空格符、换行符、回车符、Tab符、进纸符做分隔标记。(2)StringTokenizer(String s,String delim)为字符串s构造一个分析器。例如:StringTokenizer fenxi=new StringTokenizer(you are welcome);StringTokenizer fenxi=new StringTokenizer(you,are;welcome,;);称一个StringToke
24、nizer对象为一个字符串分析器,一个分析器可以使用nextToken()方法逐个获取字符串中的语言符号,每当调用nextToken()时,都将在字符串中获得下一个语言符号,每当获取到一个语言符号,字符串分析器中的负责计数的变量的值就自动减一,该计数变量的初始值等于字符串中的单词数目。通常用while循环来逐个获取语言符号,常使用StringTokenizer类中的hasMoreTokens()方法和countTokens()方法。6 6.5.2 能力目标能力目标 掌握怎样使用StringTokenizer对象分解一个字符串。6.5.3 任务驱动将下列Application6_8.java中的
25、【代码】替换为程序代码。程序运行效果如图程序运行效果如图6.76.7。任务任务 小结小结在6.4的实践环节学习了怎样使用String类的split()方法分解字符串。本节学习的StringTokenizer类的nextToken()方法和String类的split()方法不同的是,nextToken()方法不使用正则表达式做分隔标记来分解字符串。6.5.4 实践环节 下下列列代代码码使使用用StringTokenizer类类,用用左左、右右小小括括号号、逗逗号号或或空空格格的的任任意意组组合合做做分分隔隔标标记记,统统计计出出字字符符串串:you are welcome(thank you),
26、nice to meet you中中的的单单词词数数目目,并并单单独独输输出出这这些些单单词词。请请上上机机调调试试代代码码,并并编编写写代代码码统统计计你你熟熟悉悉的的英英文文句子中的单词。句子中的单词。Application6_9.java 6.6 6.6 日期 6.6.1 核心知识核心知识_11Date类类 使使用用Date类类的的无无参参数数构构造造方方法法创创建建的的对对象象可可以以获获取取本本机机的的当当前前日期和时间,例如:日期和时间,例如:Date nowTime=new Date();那那么么,当当前前nowTime对对象象中中含含有有的的日日期期、时时间间就就是是创创建建n
27、owTime对象时的本地计算机的日期和时间。对象时的本地计算机的日期和时间。可可以以使使用用Date的的带带参参数数的的构构造造方方法法:Date(long time)来来创创建建一一个个Date对象,例如:对象,例如:Date date1=new Date(1000),date2=new Date(-1000);6.6.1 核心知识核心知识 _22Calendar类类 Calendar类类在在java.util包包中中。使使用用Calendar类类的的static方方法法getInstance()可可以初始化一个日历对象,如:以初始化一个日历对象,如:Calendar calendar=Ca
28、lendar.getInstance();然后,然后,calendar对象可以调用方法:对象可以调用方法:public final void set(int year,int month,int date)public final void set(int year,int month,int date,int hour,int minute)public final void set(int year,int month,int date,int hour,int minute,int second)将日历翻到任何一个时间,当参数将日历翻到任何一个时间,当参数year取负数时表示公元前。取负
29、数时表示公元前。calendar对对象象调调用用方方法法public int get(int field)可可以以获获取取有有关关年年份份、月月份份、小小时、星期等信息,参数时、星期等信息,参数field的有效值由的有效值由Calendar的静态常量指定,例如:的静态常量指定,例如:calendar.get(Calendar.MONTH);返回一个整数,如果该整数是0表示当前日历是在一月,该整数是1表示当前日历是在二月等。calendar.get(Calendar.DAY_OF_WEEK);返回一个整数,如果该整数是1表示星期日,如果是2表示是星期一,依次类推,如果是7表示是星期六。日历对象调
30、用日历对象调用public long getTimeInMillis()可以将时间表示为毫秒。可以将时间表示为毫秒。6.6.2 能力目标能力目标 能使用能使用DateDate类或类或CalendarCalendar类处理和日期相关的问。类处理和日期相关的问。6.6.3 任务驱动将下列Application6_10.java中的【代码】替换为程序代码。OutputTime.javaOutputTime.java 程序运行效果如图程序运行效果如图6.86.8。任务任务 小结小结(1)如果希望按着某种习惯来输出时间,比如时间的顺序 年 月 星期 日 或 年 月 星期 日 小时 分 秒。可以使用jav
31、a.text包中的DateFormat的子类.(2)SimpleDateFormat有一个常用构造方法:public SimpleDateFormat(String pattern);可以用参数pattern指定的格式创建一个对象,该对象调用:public String format(Date date)方法格式化时间对象date。(3)pattern是由普通字符和一些称作格式符组成的字符序列。例如,设pattern=yyyy-MM-dd。(4)format方法在格式化date时,将用date中的相应的时间替换相应的格式符,简单地说,,format方法返回的字符串就是把pattern中的格式符
32、用相应时间替换后的字符序列。6.6.4 实践环节 上机调试下列代码,了解时间的格式化上机调试下列代码,了解时间的格式化。Application6_11.java6.7 6.7 数学公式数学公式 6.7.1 核心知识核心知识_11Math类类 java.lang包包中中的的Math类类包包含含许许多多用用来来进进行行科科学学计计算算的的类类方方法法,这这些些方方法法可可以以直直接接通通过过类类名名调调用用。另另外外,Math类类还还有有两两个个静静态态常常量量E(PI(以下是以下是Math类的常用类方法:类的常用类方法:public static long abs(double a)返回a的绝对
33、值。public static double max(double a,double b)返回a、b的最大值。public static double min(double a,double b)返回a、b的最小值。public static double random()产生一个0到1之间的随机数(不包括0和1)。public static double pow(double a,double b)返回a的b次幂。public static double sqrt(double a)返回a的平方根。public static double log(double a)返回a的对数。public
34、 static double sin(double a)返回a的正弦值。public static double asin(double a)返回a的反正弦值。6.7.1 核心知识核心知识 _22Random类类 Java提提供供了了更更为为灵灵活活的的用用于于获获得得随随机机数数的的Random类类,该该类类在在java.util包包中中.。使用。使用Random类的如下构造方法:类的如下构造方法:public Random();和和 public Random(long seed);创创建建Random对对象象,其其中中第第二二个个构构造造方方法法使使用用参参数数seed指指定定的的种种子
35、子创创建建一一个个Random对象。对象。人人们们习习惯惯地地将将Random对对象象称称为为随随机机数数生生成成器器。例例如如,下下列列随随机机数数生生成成器器random调用不带参数的调用不带参数的nextInt()方法返回一个随机整数:方法返回一个随机整数:Random random=new Random();random.nextInt();如如果果想想让让随随机机数数生生成成器器random返返回回一一个个0至至n之之间间(包包括括0,但但不不包包括括n)的的随随机机数数,可可以以让让random调调用用带带参参数数的的nextInt(int m)方方法法(参参数数m必必须须取取正正
36、整整数数值值),例如,例如,random.nextInt(100);返回一个返回一个0至至100之间的随机整数。之间的随机整数。如如果果程程序序需需要要随随机机得得到到true和和false两两个个表表示示真真和和假假的的boolean值值,可可以以让让random调调 用用 nextBoolean()方方 法法,例例 如如 random.nextBoolean();返返 回回 一一 个个 随随 机机boolean值。值。6.7.2 能力目标能力目标 掌握常用数学公式以及怎样获得随机数。6.7.3 任务驱动将下列Application6_12.java 中的【代码】替换为程序代码 程序运行效果
37、如图程序运行效果如图6.96.9 任务任务 小结小结正弦等方法的参数是double类型,其代表的意义是弧度,不是“角度”,例如,要计算正弦90度的结果,那么给参数的值必须是/2。6.7.4 实践环节 当当需需要要处处理理大大整整数数时时,可可以以使使用用java.math包包中中提提供供的的BigInteger类。类。public BigInteger(String val)构构造造一一个个十十进进制制的的BigInteger对对象象。该该构构造造方方法法可可以以发发生生NumberFormatException异异常常,也也就就是是说说,字字符符串串参参数数val中中如如果含有非数字字符就会
38、发生果含有非数字字符就会发生NumberFormatException异常。异常。上机调试下列代码,了解上机调试下列代码,了解BigInteger类。类。Application6_13.java 6.8 6.8 可变字符串可变字符串 6.8.1 核心知识核心知识 String类创建的字符串对象是不可修改的。类创建的字符串对象是不可修改的。StringBuffer类类能能创创建建可可修修改改的的字字符符串串序序列列,该该类类的的对对象象的的实实体体的的内内存存空空间间可可以以自自动动的的改改变变大大小小,便便于于存存放放一一个个可可变变的的字字符符序序列列,一一个个StringBuffer对对象
39、象调调用用append方法可以追加字符序列,例如:方法可以追加字符序列,例如:StringBuffer s=new StringBuffer(我喜欢);对对象象s可可调调用用append方法追追加加一一个个字符串序列字符串序列s.append(玩篮球);使得使得s中的字符序列是中的字符序列是我喜欢玩篮球.public char charAt(int n)方法得到参数n指定的位置上的单个字符。当前对象实体中的字符串序列的第一个位置为0,第二个位置为1,依次类推。setCharAt(int n,char ch)将当前StringBuffer对象实体中的字符串位置n处的字符用参数ch指定的字符替换。
40、StringBuffer insert(int index,String str)方法将参数str指定的字符串插入到参数index指定的位置。delete(int startIndex,int endIndex)从当前StringBuffer对象实体中的字符串中删除一个子字符串,并返回当前对象的引用。这里startIndex指定了需删除的第一个字符的下标,而endIndex指定了需删除的最后一个字符的下一个字符的下标。6.8.2 能力目标能力目标 使用StringBuffer类创建可变字符串,并修改创建的可变字符串。6.8.3 任务驱动将下列Application6_14.java中的【代码】
41、替换为程序代码。程序运行效果如图程序运行效果如图6.106.10。任务任务 小结小结可以使用String类的构造方法String(StringBuffer bufferstring)创建一个字符串对象,即将一个可变字符串转化为不可变的字符串。6.9 6.9 小结小结 1掌握String类的常用方法。2使用StringTokenizer分析字符串,获取字符串中被分隔符分隔的单词。3当程序需要处理时间时,使用Date类和Calendar类。4如果需要处理特别大的整数,使用BigInteger类。5掌握String类的和StringBuffer类的不同,以及二者之间的联系。“本节结束咯本节结束咯偶都会了偶都会了太葱明了太葱明了”