声明:由于版权等原因,本文隐藏了部分内容,由此造成的不便请大家谅解。
如果你觉得本文对你有所帮助,请回贴支持,谢谢。
授课教师:牟勇
课时:100分钟
l 本章技能目标
n 掌握String的基本用法
u 定义,初始化字符串
u 计算字符串长度
u 比较,连接,提取字符串
n 会使用带参数的方法
n 会使用StringBuffer类的方法对字符串进行操作
l 本章重点
n掌握String的常用方法
n掌握编写带参数的方法
l 本章难点
n如何编写带参数的方法
n调用带参数的方法
l 本章工作任务
升级Java应用程序HelloAccp
n实现学员注册密码验证
n打印学员成绩单
n实现文件名和邮箱ID的合法性验证
阅读下面代码,哪个有错误?说明理由
double[ ] a = new double[ ];
double[ ] a = new double[5]{1,2,3,4,5,};
double a = {1,2,3,4,5};
填代码:逆序输出数组中的元素
int[ ] a = new int[ ] {1,2,3,4,5};
for (int i=a.length-1;i>=0;i-- ){
System.out.println(a[i]);
}
如何定义一个字符串?
使用什么方法可以获得字符串的长度?
如何定义一个StringBuffer类的对象?
授课思路:
本章依次讲解4个问题:字符串的使用,带参数的方法,StringBuffer类的使用以及Java语言特点的总结。
字符串的使用:主要讲解String类提供的操作字符串的常用方法,包括计算字符串的长度,比较两个字符串,连接字符串以及提取字符串。
带参数的方法:这是继第7章讲解类的方法后,讲解带参数的方法。进一步讲解定义方法的优点,以及如何编写带参数的方法和调用带参数的方法。
StringBuffer类的使用:讲解另一种存储字符串的类:StringBuffer。讲解它的toString方法和append方法。强调它比String类更高效。
教员最好现场演示,逐行敲打并解释代码,课堂练习题教员可以巡视全班,给学员指导,一定要让学员充分讨论并动手练习。
生活和编程中都频繁使用字符串
告诉学员:String类是一个Java类库中最常用的类,我们在前面的学习中已经在频繁使用了。让学员回忆之前我们是如何使用String的,之后再回顾以前已经学过的String类的equals方法。最后引出String其实还有很多常用的方法。
计算字符串的长度
问题:随机输入你心中想到的一个名字,然后输出它的字符串长度
答案:(注意强调String的length()方法,并与数组的length属性相比较,强调String类是方法,要打小括号,数组是属性,不打小括号)
package s1java.sg.chap9;
import java.util.*;
public class HelloAccp1 {
public static void main(String[ ] args) {
System.out.print("请随机输入你想到的名字: ");
Scanner input = new Scanner(System.in);
String name = input.next();
System.out.println("这个名字的长度是: \" " + name.length()+ "\" ");
}
}
|
字符串比较
问题:两个学员输入各自最喜欢的课程名称,判断是否一致
答案:(教员先写出代码,然后让学员来输入他们喜欢的课程名称,引导学员观察结果)
//判断课程名称是否相同
if(favCourse1.equals(favCourse2)){
System.out.println("最喜欢的课程相同");
}else{
System.out.println("最喜欢的课程不相同");
}
|
接着教员输入Java,和java,这时学员一定会觉得很奇怪,于是引出下面的提问。
提问:为什么Java和java不是同一门课呢?这要从eqauls的实现说起。
答案:eqauls方法是把两个字符串(一个是它自己,另一个是传入的参数)逐字符的按ASCII码进行比较,每一个字符都完全相等才认为两个字符串是相同的,J和j的ASCII码是不一样的,所以,eqauls方法认为Java和java是不相等的。
提问:那如何解决这个问题呢?
答案:两个方案。
方案一:使用String的另一个方法eqaulsIgnoreCase()。(强调这个方法将忽略大小写)
if(favCourse1.equalsIgnoreCase(favCourse2)){
System.out.println("最喜欢的课程相同");
}else{
System.out.println("最喜欢的课程不相同");
}
|
方案二:首先使用toUpperCase()方法或者toLowerCase(),之后再用eqauls()比较(在使用这两个方法之前,教员可以先使用输出语句输出一下两个方法的返回结果,让学员实际看到大小写转换的效果)
if(favCourse1.toUpperCase().equals(favCourse2.toUpperCase())){
System.out.println("最喜欢的课程相同");
}else{
System.out.println("最喜欢的课程不相同");
}
|
小结1:
学员进行入学注册,输入两次密码,如果相同,提示注册成功,如果不相同,提示重新输入密码
/**
*HelloAccp3.java 学员注册,检查输入密码是否一致
*/
package s1java.sg.chap9;
import java.util.*;
public class HelloAccp3 {
/**
* @param args
*/
public void checkPassword(){
// 从键盘接收密码
System.out.println("---欢迎进入员注册系统---");
Scanner input = new Scanner(System.in);
System.out.println("请输入您的密码:");
String psw1 = input.next();
System.out.println("请确认您的密码:");
String psw2 = input.next();
// 比较两次输入的密码是否一致
if (psw1.equals(psw2)) {
System.out.println("恭喜您!注册成功!");
} else {
System.out.println("密码不一致,请重新注册!");
}
}
public static void main(String[] args) {
checkPassword();
}
}
|
字符串连接
某学员的Java成绩如表所示,格式化输出他的成绩单。
答案:方法一:使用”+”(教员在演示完以下代码后,说明这样显示不是很直观,能不能改变一下格式,让别人能一目了然?然后给代码中加入转义字符,并对转义字符进行讲解:转义字符是把那些在Java里已经被定义的字符,或者那些无法用可视字符来表达的操作转义为字符串来进行输出的办法。如:双引号已经被Java定义为字符串的标志字符,如果我们需要输出一个双引号字符,就必须写为”\””,如果我们希望输出的字符串换到另一行,我们就必须写为“\n”。)
int sqlScore = 80; //sql成绩
int javaScore = 90; //java成绩
double htmlScore = 86.7; //html成绩
//创建成绩单
String scoreSheet = "SQL:" + sqlScore + " Java:" + javaScore
+ " HTML:" + htmlScore;
//打印成绩单
System.out.println("*****令狐冲成绩单*****");
System.out.println(scoreSheet);
|
方法二:使用String类的concat()方法
String s = new String("你好,");
String name = new String("张三!");
String sentence = s.concat(name);
System.out.println(sentence);
|
字符串常用提取方法
问题引入:使用作业提交系统提交Java作业,输入java源代码文件名,并输入自己的邮箱,提交前对Java文件名以及邮箱有效性进行检查。编码实现
分析:
合法的文件名应该以.java结尾
合法的邮箱名中至少要包含“@”和“.”, 并检查“@”是否在“.”之前
解决方案:看看String有没有什么方法能帮助我们。
常用提取方法列表:
|
方法
|
说明
|
|
public int indexOf(int ch)
|
搜索第一个出现的字符ch(或字符串value)
|
|
public int indexOf(String value)
|
|
public int lastIndexOf(int ch)
|
搜索最后一个出现的字符ch(或字符串value)
|
|
public int lastIndexOf(String value)
|
|
public String substring(int index)
|
提取从位置索引开始的字符串部分
|
|
public String substring(int beginindex, int endindex)
|
提取beginindex和endindex之间的字符串部分
|
|
public String trim()
|
返回一个前后不含任何空格的调用字符串的副本
|
出示答案:作业提交系统(教员可以在这里先使用带参数的方法,为后面的内容埋下伏笔,重点讲解String的提取方法的使用方法,让学员明白如何使用带参数的方法)。
public class HelloAccp5 {
public boolean checkEmail(String email){
boolean emailCorrect = false;
// 检查你的邮箱格式
if (email.indexOf('@') != -1 && email.indexOf('.') > email.indexOf('@')) {
emailCorrect = true;
} else {
emailCorrect=false;
}
return emailCorrect;
}
public boolean checkFileName(String filename){
boolean fileCorrect = false;
// 检查Java文件名
int index = fileName.lastIndexOf(".");
if (index != -1
&& index != 0
&& fileName.substring(index + 1, fileName.length()).equals("java")) {
fileCorrect = true;
} else {
fileCorrect=false;
}
return fileCorrect;
}
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("---欢迎进入作业提交系统---");
Scanner input = new Scanner(System.in);
System.out.println("请输入Java文件名: ");
String fileName = input.next();
System.out.println("请输入你的邮箱");
String email = input.next();
// 输出检测结果
if(checkFileName(fileName)){
if(cheEmail(email)){
System.out.println(“作业提交成功!”);
}else{
System.out.println(“email名称有误,请检查”);
}
}else{
System.out.println(“作业名称有误,请检查”);
}
}
|
小结2:如果要打印输出“小鱼儿”,应填入的代码是什么?
String word = "Hello, ";
word = word.trim();
String s = word.concat("小鱼儿!");
int index1 = s.indexOf(',');
int index2 = s.indexOf('!');
System.out.println(s.substring(______, _______));