实验目的
1)熟悉接口的定义和使用
2)学会字符串处理的方法
实验内容
1)
编写程序:定义一个door抽象类,定义一个接口alarm。抽象类和door里面的方法自定义;定义一个door的子类并实现alarm接口。实例化这个子类并调用其方法(方法里输出相关的信息即可)。
2)
将一字符串"I love java program"分隔成四个字符串"I",“love”,“java”,“program”。(用StringTokenizer类);
3)
给定字符串数组Strings[]={“string”,“starting”,“strong”,“street”,“stir”,“studeng”,“soft”,“sting”};编写应用程序(使用String类提供的方法):
- 统计以st开头的字符串有多少个;
- 统计以ng结尾的字符串有多少个;
- 分别给出字符’r’在字符串中第一次出现的位置。
实验分析、代码及运行结果
1)
public class Work1 {
public static void main(String[] args) {
HomeDoor h1 = new HomeDoor();
h1.close();
h1.open();
h1.ring();
}
}
abstract class door{
public abstract void open();
public abstract void close();
}
interface alarm{
void ring();
}
class HomeDoor extends door implements alarm{
@Override
public void ring() {
// TODO Auto-generated method stub
System.out.println("ding lin lin....");
}
@Override
public void open() {
// TODO Auto-generated method stub
System.out.println("open door");
}
@Override
public void close() {
// TODO Auto-generated method stub
System.out.println("close door");
}
}
运行结果:
分析:
子类必须实现抽象父类中的所有抽象方法(除非子类也是抽象类),并且必须实现接口中的所有方法。
2)
import java.util.StringTokenizer;
public class Work2 {
public static void main(String[] args) {
StringTokenizer str = new StringTokenizer("I love java program");
while(str.hasMoreElements()) {
System.out.println(str.nextToken());
}
}
}
运行结果:
分析:
StringTokenizer类中的构造方法当不传第二个参数时:默认以空格、换行、回车为分割符号
public StringTokenizer(String str) {
this(str, " \t\n\r\f", false);
}
public boolean hasMoreTokens(): 判断分割的字符串的集合是否还有下一个
public String nextToken(): 返回分割的下一个字符串
3)
public class Work3 {
public static void main(String[] args) {
int st = 0;
int ng = 0;
String Strings[]={
"string","starting","strong","street","stir","studeng","soft","sting"};
for(String s:Strings) {
String r;
int a = s.indexOf('r');
if(s.startsWith("st")) {
st++;
}
if(s.endsWith("ng")) {
ng++;
}
System.out.println("***********************");
if(a==-1) {
System.out.println(s+"字符串中无r");
}else {
System.out.println(s+"字符串中r第一次出现的位置为: " + (a + 1));
}
}
System.out.println("============================");
System.out.println("以st开头的字符串有"+ st + "个");
System.out.println("以ng结尾的字符串有"+ ng + "个");
}
}
运行结果:
分析:
indexOf()方法返回某字符在字符串中第一次出现的位置索引,
stratsWith()方法判断某字符串是否以指定字符或者字符串开始
endsWith()方法判断某字符串是否以指定字符或者字符串结尾
总结:
抽象类:
1)抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
2)由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
3)子类必须实现抽象父类中的所有抽象方法(除非子类也是抽象类)
接口:
除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。
接口不能用于实例化对象。
接口没有构造方法。
接口中所有的方法必须是抽象方法。
接口不能包含成员变量,除了 static 和 final 变量。
接口不是被类继承了,而是要被类实现。
接口支持多继承。
StringTokenizer:
StringTokenizer是一个用来分隔String的应用类,相当于split函数。
1.构造函数
public StringTokenizer(String str)
public StringTokenizer(String str, String delim)
public StringTokenizer(String str, String delim, boolean returnDelims)
第一个参数就是要分隔的String,第二个是分隔字符集合,第三个参数表示分隔符号是否作为标记返回,如果不指定分隔字符,默认的是:”\t\n\r\f”
2.常用方法
public boolean hasMoreTokens(): 判断分割的字符串的集合是否还有下一个
public String nextToken(): 返回分割的下一个字符串
第三题:
- indexOf(): 返回某字符在字符串中第一次出现的位置索引
- startsWith(): 判断某字符串是否以指定字符或者字符串开始
- endsWith(): 判断某字符串是否以指定字符或者字符串结尾