实验3:抽象类、接口及字符串


实验目的

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类提供的方法):

  1. 统计以st开头的字符串有多少个;
  2. 统计以ng结尾的字符串有多少个;
  3. 分别给出字符’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(): 判断某字符串是否以指定字符或者字符串结尾

猜你喜欢

转载自blog.csdn.net/qq_46456049/article/details/108976587