教案Java语言程序设计教案56学时第8章Word格式文档下载.docx
《教案Java语言程序设计教案56学时第8章Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《教案Java语言程序设计教案56学时第8章Word格式文档下载.docx(44页珍藏版)》请在冰点文库上搜索。
教学目的、要求(分了解、理解、掌握三个层次):
掌握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分钟;
其它分钟
授课类型(请打√):
理论课√讨论课□实验课□习题课□其它□
教学方式(请打√):
讲授√讨论□示教□指导□其它□
教学手段(请打√):
多媒体模型□实物□挂图□音像□其它√
主要内容
第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);
==hello);
Stringyou="
Stringhi="
StringtestTwo=you+hi;
//【代码2】
System.out.println(hello==testTwo);
//输出结果是false
StringtestThree=you+hi;
System.out.println(testTwo==testThree);
}
}
8.1.3String类的常用方法
1.publicintlength()
2.publicbooleanequals(Strings)
下面的例子2说明了equals的用法。
例子2
Example8_2.java
publicclassExample8_2{
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("
System.out.println(s3.equals(s4));
System.out.println(s3==s4);
false
Strings5,s6;
s5="
勇者无敌"
s6="
System.out.println(s5.equals(s6));
System.out.println(s5==s6);
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;
i<
a.length-1;
i++){
for(intj=i+1;
j<
a.length;
j++){
if(a[j].compareTo(a[i])<
0){
Stringtemp=a[i];
a[i]=a[j];
a[j]=temp;
}
Example8_3.java
importjava.util.*;
publicclassExample8_3{
String[]a={"
melon"
"
apple"
pear"
banana"
};
String[]b={"
西瓜"
苹果"
梨"
香蕉"
使用SortString类的方法按字典序排列数组a:
"
SortString.sort(a);
System.out.print("
"
+a[i]);
使用类库中的Arrays类,按字典序排列数组b:
Arrays.sort(b);
b.length;
+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="
x=Integer.parseInt(s);
例子4求若干个数之和,若干个数从键盘输入。
例子4
Example8_4.java
publicclassExample8_4{
doublesum=0,item=0;
booleancomputable=true;
for(Strings:
args){
try{item=Double.parseDouble(s);
sum=sum+item;
catch(NumberFormatExceptione){
您输入了非数字字符:
+e);
computable=false;
if(computable)
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{
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{
char[]a,c;
Strings="
1945年8月15日是抗战胜利日"
a=newchar[4];
s.getChars(11,15,a,0);
//数组a的单元依次放的字符是'
抗'
,'
战'
,胜'
利'
。
System.out.println(a);
c="
十一长假期间,学校都放假了"
.toCharArray();
c.length;
i++)
System.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{
byted[]="
.getBytes();
数组d的长度是:
+d.length);
Strings=newString(d,6,2);
//输出:
好
System.out.println(s);
s=newString(d,0,6);
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;
k<
m;
k++){
intmima=c[k]+p[k%n];
//加密
c[k]=(char)mima;
returnnewString(c);
//返回密文
Stringdecrypt(StringsourceString,Stringpassword){//解密算法
intmima=c[k]-p[k%n];
//解密
//返回明文
Example8_8.java
importjava.util.Scanner;
publicclassExample8_8{
StringsourceString="
今晚十点进攻"
EncryptAndDecryptperson=newEncryptAndDecrypt();
输入密码加密:
+sourceString);
Scannerscanner=newScanner(System.in);
Stringpassword=scanner.nextLine();
Stringsecret=person.encrypt(sourceString,password);
密文:
+secret);
输入解密密码"
password=scanner.nextLine();
Stringsource=person.decrypt(secret,password);
明文:
+source);
8.1.7正则表达式及字符串的替换与分解
1.正则表达式
正则表达式是一个String对象的字符序列,该字符序列中含有具有特殊意义字符,这些特殊字符称做正则表达式中的元字符。
表8.1列出了常用的元字符及其意义。
注:
有关正则表达式的细节可查阅java.util.regex包中的Pattern类。
例子9程序判断用户从键盘输入的字符序列是由英文字母,数字或下划线所组成。
例子9
Example8_9.java
publicclassExample8_9{
publicstaticvoidmain(Stringargs[]){
Stringregex="
[a-zA-Z|0-9|_]+"
Stringstr=scanner.nextLine();
if(str.matches(regex)){
System.out.println(str+"
是英文字母,数字或下划线构成"
else{
中有非法字符"
2.字符串的替换
String对象调用publicStringreplaceAll(Stringregex,Stringreplacement)方法返回一个新的String对象,这个新的String对象的字符序列是把当前String对象的字符序列中所有和参数regex匹配的子字符序列,用参数replacement的字符序列替换后得到字符序列。
在下面的例子10中使用了replaceAll()方法。
例子10
Example8_10.java
publicclassExample8_10{
Stringstr="
欢迎大家访问了解、参观公司"
(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
publicclassExample8_11{
一行文本:
Scannerreader=newScanner(System.in);
Stringstr=reader.nextLine();
//regex匹配由空格、数字和!
#$%&
'
()*+,-./:
<
=>
?
@[\]^_`{|}~组成的字符序列
[\\s\\d\\p{Punct}]+"
Stringwords[]=str.split(regex);
words.length;
i++){
intm=i+1;
单词"
+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
publicclassExample8_12{
StringshoppingReceipt="
牛奶:
8.5圆,香蕉3.6圆,酱油:
2.8圆"
PriceTokenlookPriceMess=newPriceToken();
System.out.println(shoppingReceipt);
doublesum=lookPriceMess.getPriceSum(shoppingReceipt);
购物总价格%-7.2f"
sum);
intamount=lookPriceMess.getGoodsAmount(shoppingReceipt);
doubleaver=lookPriceMess.getAverPrice(shoppingReceipt);
System