教案Java语言程序设计教案56学时第8章.docx
《教案Java语言程序设计教案56学时第8章.docx》由会员分享,可在线阅读,更多相关《教案Java语言程序设计教案56学时第8章.docx(44页珍藏版)》请在冰豆网上搜索。
教案Java语言程序设计教案56学时第8章
授课内容
学时分配
教学方法与手段
进度计划
(周次)
课堂讲授(学时)
上机实践(学时)
Java语言入门
标识符、关键字和数据类型
运算符、表达式和语句
6
4
2
1~2
类与对象
14
10
4
2~5
子类与继承
6
4
2
5-7
接口与实现
4
2
2
7-8
内部类与异常类
2
2
0
8
常用实用类
6
4
2
9-10
组件及事件处理
6
4
2
10-11
输入、输出流
2
2
0
12
JDBC与MySQL数据库
4
2
2
12-13
Java多线程机制
2
2
0
13
Java网络的基本知识
2
2
0
14
总结
2
2
0
14
总学时
各章教学实施计划
章节题目第8章常用实用类
8.1节-8.3节
学时
2
教学目的、要求(分了解、理解、掌握三个层次):
掌握String类、StringTokenizer类、Scanner类的常用方法。
教学内容(包括基本内容、重点、难点):
基本内容:
◆String类
◆StringTokenizer类
◆Scanner类
重点:
掌握String类,StringTokenizer类、Scannner类的使用。
难点:
StringTokenizer类、Scannner。
讨论、思考题、作业:
习题82
(1),(3),(4)3
(1)-(5)
预习第8章8.4-8.12节
参考书目(含参考书、文献等)具体内容:
参考书对应章节
课堂教学实施计划
第13课
教学过程设计:
复习分钟;授新课95分钟
讨论5分钟;其它分钟
授课类型(请打√):
理论课√讨论课□实验课□习题课□其它□
教学方式(请打√):
讲授√讨论□示教□指导□其它□
教学手段(请打√):
多媒体模型□实物□挂图□音像□其它√
主要内容
基本内容:
◆String类
◆StringTokenizer类
◆Scanner类
重点:
掌握String类,StringTokenizer类、Scannner类的使用。
难点:
StringTokenizer类、Scannner。
第8章常用实用类
§8.1String类
Java专门提供了用来处理字符序列的String类。
String类在java.lang包中,由于java.lang包中的类被默认引入,因此程序可以直接使用String类。
需要注意的是Java把String类声明为final类,因此用户不能扩展String类,即String类不可以有子类。
8.1.1构造String对象
String对象,习惯地被翻译为字符串对象。
1.常量对象
2.String对象
3.引用String常量
8.1.2字符串的并置
String对象可以用"+"进行并置运算,即首位相接得到一个新的String对象。
例子1
Example8_1.java
publicclassExample8_1{
publicstaticvoidmain(Stringargs[]){
Stringhello="你好";
StringtestOne="你"+"好";//【代码1】
System.out.println(hello==testOne);//输出结果是true
System.out.println("你好"==testOne);//输出结果是true
System.out.println("你好"==hello);//输出结果是true
Stringyou="你";
Stringhi="好";
StringtestTwo=you+hi;//【代码2】
System.out.println(hello==testTwo);//输出结果是false
StringtestThree=you+hi;
System.out.println(testTwo==testThree);//输出结果是false
}
}
8.1.3String类的常用方法
1.publicintlength()
2.publicbooleanequals(Strings)
下面的例子2说明了equals的用法。
例子2
Example8_2.java
publicclassExample8_2{
publicstaticvoidmain(Stringargs[]){
Strings1,s2;
s1=newString("天道酬勤");
s2=newString("天道酬勤");
System.out.println(s1.equals(s2));//输出结果是:
true
System.out.println(s1==s2);//输出结果是:
false
Strings3,s4;
s3="wearestudents";
s4=newString("wearestudents");
System.out.println(s3.equals(s4));//输出结果是:
true
System.out.println(s3==s4);//输出结果是:
false
Strings5,s6;
s5="勇者无敌";
s6="勇者无敌";
System.out.println(s5.equals(s6));//输出结果是:
true
System.out.println(s5==s6);//输出结果是:
true
}
}
3.publicbooleanstartsWith(Strings)、publicbooleanendsWith(Strings)方法
4.publicintcompareTo(Strings)方法
按字典序比较两个String对象还可以使用publicintcompareToIgnoreCase(Strings)方法,该方法忽略大小写。
下面的例子3中使用java.util包中的Arrays调用sort方法和自己编写SortString类中的sort方法将一个String数组按字典序排列。
例子3
SortString.java
publicclassSortString{
publicstaticvoidsort(Stringa[]){
intcount=0;
for(inti=0;ifor(intj=i+1;jif(a[j].compareTo(a[i])<0){
Stringtemp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
}
Example8_3.java
importjava.util.*;
publicclassExample8_3{
publicstaticvoidmain(Stringargs[]){
String[]a={"melon","apple","pear","banana"};
String[]b={"西瓜","苹果","梨","香蕉"};
System.out.println("使用SortString类的方法按字典序排列数组a:
");
SortString.sort(a);
for(inti=0;iSystem.out.print(""+a[i]);
}
System.out.println("");
System.out.println("使用类库中的Arrays类,按字典序排列数组b:
");
Arrays.sort(b);
for(inti=0;iSystem.out.print(""+b[i]);
}
}
}
5.publicbooleancontains(Strings)
6.publicintindexOf(Strings)和publicintlastIndexOf(Strings)
7.publicStringsubstring(intstartpoint)
8.publicStringtrim()
8.1.4字符串与基本数据的相互转化
java.lang包中的Integer类调用其类方法publicstaticintparseInt(Strings)可以将由“数字”字符组成的字符序列,如"876",转化为int型数据,例如:
intx;
Strings="876";
x=Integer.parseInt(s);
例子4求若干个数之和,若干个数从键盘输入。
例子4
Example8_4.java
publicclassExample8_4{
publicstaticvoidmain(Stringargs[]){
doublesum=0,item=0;
booleancomputable=true;
for(Strings:
args){
try{item=Double.parseDouble(s);
sum=sum+item;
}
catch(NumberFormatExceptione){
System.out.println("您输入了非数字字符:
"+e);
computable=false;
}
}
if(computable)
System.out.println("sum="+sum);
}
}
8.1.5对象的字符串表示
下面例子5中的TV类重写了toString()方法,并使用super调用隐藏的toString()方法。
例子5
TV.java
publicclassTV{
doubleprice;
publicvoidsetPrice(doublem){
price=m;
}
publicStringtoString(){
StringoldStr=super.toString();
returnoldStr+"\n这是电视机,价格是:
"+price;
}
}
Example8_5.java
publicclassExample8_5{
publicstaticvoidmain(Stringargs[]){
Datedate=newDate();
System.out.println(date.toString());
TVtv=newTV();
tv.setPrice(5897.98);
System.out.println(tv.toString());
}
}
8.1.6字符串与字符、字节数组
1.字符串与字符数组
例子6具体地说明了getChars()和toCharArray()方法的使用。
例子6
Example8_6.java
publicclassExample8_6{
publicstaticvoidmain(Stringargs[]){
char[]a,c;
Strings="1945年8月15日是抗战胜利日";
a=newchar[4];
s.getChars(11,15,a,0);//数组a的单元依次放的字符是'抗','战',胜','利'。
System.out.println(a);
c="十一长假期间,学校都放假了".toCharArray();
for(inti=0;iSystem.out.print(c[i]);
}
}
2.字符串与字节数组
在下面的例子7中,假设机器的默认编码是GB2312。
String常量:
"Java你好",调用getBytes()返回一个字节数组d,其长度为8,该字节数组的d[0]、d[1]、d[2]和d[3]单元分别是字符J、a、v和a的编码,第d[4]和d[5]单元存放的是字符'你'的编码(GB2312编码中,一个汉字占2个字节),第d[6]和d[7]单元存放的是字符'好'的编码。
例子7
Example8_7.java
publicclassExample8_7{
publicstaticvoidmain(Stringargs[]){
byted[]="Java你好".getBytes();
System.out.println("数组d的长度是:
"+d.length);
Strings=newString(d,6,2);//输出:
好
System.out.println(s);
s=newString(d,0,6);
System.out.println(s);//输出:
Java你
}
}
3.字符串的加密算法
例子8
EncryptAndDecrypt.java
publicclassEncryptAndDecrypt{
Stringencrypt(StringsourceString,Stringpassword){//加密算法
char[]p=password.toCharArray();
intn=p.length;
char[]c=sourceString.toCharArray();
intm=c.length;
for(intk=0;kintmima=c[k]+p[k%n];//加密
c[k]=(char)mima;
}
returnnewString(c);//返回密文
}
Stringdecrypt(StringsourceString,Stringpassword){//解密算法
char[]p=password.toCharArray();
intn=p.length;
char[]c=sourceString.toCharArray();
intm=c.length;
for(intk=0;kintmima=c[k]-p[k%n];//解密
c[k]=(char)mima;
}
returnnewString(c);//返回明文
}
}
Example8_8.java
importjava.util.Scanner;
publicclassExample8_8{
publicstaticvoidmain(Stringargs[]){
StringsourceString="今晚十点进攻";
EncryptAndDecryptperson=newEncryptAndDecrypt();
System.out.println("输入密码加密:
"+sourceString);
Scannerscanner=newScanner(System.in);
Stringpassword=scanner.nextLine();
Stringsecret=person.encrypt(sourceString,password);
System.out.println("密文:
"+secret);
System.out.println("输入解密密码");
password=scanner.nextLine();
Stringsource=person.decrypt(secret,password);
System.out.println("明文:
"+source);
}
}
8.1.7正则表达式及字符串的替换与分解
1.正则表达式
正则表达式是一个String对象的字符序列,该字符序列中含有具有特殊意义字符,这些特殊字符称做正则表达式中的元字符。
表8.1列出了常用的元字符及其意义。
注:
有关正则表达式的细节可查阅java.util.regex包中的Pattern类。
例子9程序判断用户从键盘输入的字符序列是由英文字母,数字或下划线所组成。
例子9
Example8_9.java
importjava.util.Scanner;
publicclassExample8_9{
publicstaticvoidmain(Stringargs[]){
Stringregex="[a-zA-Z|0-9|_]+";
Scannerscanner=newScanner(System.in);
Stringstr=scanner.nextLine();
if(str.matches(regex)){
System.out.println(str+"是英文字母,数字或下划线构成");
}
else{
System.out.println(str+"中有非法字符");
}
}
}
2.字符串的替换
String对象调用publicStringreplaceAll(Stringregex,Stringreplacement)方法返回一个新的String对象,这个新的String对象的字符序列是把当前String对象的字符序列中所有和参数regex匹配的子字符序列,用参数replacement的字符序列替换后得到字符序列。
在下面的例子10中使用了replaceAll()方法。
例子10
Example8_10.java
publicclassExample8_10{
publicstaticvoidmain(Stringargs[]){
Stringstr="欢迎大家访问了解、参观公司";
Stringregex="(http:
//|www)\56?
\\w+\56{1}\\w+\56{1}\\p{Alpha}+";
System.out.printf("替换\n\"%s\"\n中的网站链接信息后得到的字符串:
\n",str);
str=str.replaceAll(regex,"******");
System.out.println(str);
Stringmoney="89,235,678¥";
System.out.print(money+"转化成数字:
");
Strings=money.replaceAll("[,\\p{Sc}]","");//"\\p{Sc}"可匹配任何
货币符号
longnumber=Long.parseLong(s);
System.out.println(number);
}
}
3.字符序列的分解
String类提供了一个实用的方法publicString[]split(Stringregex),String对象调用该方法时,使用参数指定的正则表达式regex作为分隔标记分解出当前String对象的字符序列中的单词,并将分解出的单词存放在String数组中。
下面的例子11中,用户从键盘输入一行文本,程序输出其中的单词。
用户从键盘输入whoareyou(Caven?
)观察运行效果。
例子11
Example8_11.java
importjava.util.Scanner;
publicclassExample8_11{
publicstaticvoidmain(Stringargs[]){
System.out.println("一行文本:
");
Scannerreader=newScanner(System.in);
Stringstr=reader.nextLine();
//regex匹配由空格、数字和!
"#$%&'()*+,-./:
;<=>?
@[\]^_`{|}~组成的字符序列
Stringregex="[\\s\\d\\p{Punct}]+";
Stringwords[]=str.split(regex);
for(inti=0;iintm=i+1;
System.out.println("单词"+m+":
"+words[i]);
}
}
}
8.2StringTokenizer类
当分析一个String对象的字符序列并将字符序列分解成可被独立使用的单词时,可以使用java.util包中的StringTokenizer类,该类有两个常用的构造方法。
∙StringTokenizer(Strings):
∙StringTokenizer(Strings,Stringdelim):
例子12计算购物小票的中的商品价格的和。
程序关心是购物小票中的数字,因此需要分解出这些数字,以便单独处理,这样就需要把非数字的字符序列替换成统一的字符,以便使用分隔标记分解出数字,例如,对于"12#25#39.87",如果用字符#做分隔标记,就很容易分解出数字单词。
在例子12的PriceToken类中,把购物小票中非数字的字符序列都替换成#,然后再分解出数字单词(价格),并计算出这些数字的和。
例子12
Example8_12.java
importjava.util.*;
publicclassExample8_12{
publicstaticvoidmain(Stringargs[]){
StringshoppingReceipt="牛奶:
8.5圆,香蕉3.6圆,酱油:
2.8圆";
PriceTokenlookPriceMess=newPriceToken();
System.out.println(shoppingReceipt);
doublesum=lookPriceMess.getPriceSum(shoppingReceipt);
System.out.printf("购物总价格%-7.2f",sum);
intamount=lookPriceMess.getGoodsAmount(shoppingReceipt);
doubleaver=lookPriceMess.getAverPrice(shoppingReceipt);
System