所谓:“纸上得来终觉浅,绝知此事要躬行。”
关于接口的知识,可以几分钟过一遍:Java-接口—知识(基础)-CSDN博客
现在就是练习time,先来看题:
定义一个接口 Filter,表示过滤器,其定义的如下:
- Filter接口有一个抽象方法:public void doFilter(); 表示进行过滤操作。
定义一个类:WordFilter:
WordFilter表示单词过滤器,该类要实现Filter接口,实现其doFilter()方法,实现过滤单词,将单词的首字母转换为对应的大写字母,剩余的字母全小写;
对于WordFilter类的要求如下:
- 一个String类型的成员变量 word,表示待进行过滤的单词,并定义该变量的setter和getter方法;
- 带参数的构造方法,实例化过滤器对象时,按参数值初始化成员变量word的值;
- 实现doFilter方法,在实现的doFilter方法中,将word字符串的首字母大写,其余字母全小写;
- 对于WordFilter类的更多接口细节可参看Main类中的代码。
Main类代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> clazz1 = Class.forName("Filter");
Class<?> clazz2 = Class.forName("WordFilter");
System.out.println(clazz1.isInterface()+" "+clazz1.isAssignableFrom(clazz2));
System.out.println("请输入一个英文单词:");
Scanner scanner = new Scanner(System.in);
String input = scanner.next();
WordFilter filter = new WordFilter(input);
System.out.println("原单词是:"+filter.getWord());
filter.doFilter();
System.out.println("过滤处理后:"+filter.getWord());
filter.setWord("programmING");
System.out.println("原单词是:"+filter.getWord());
filter.doFilter();
System.out.println("过滤处理后:"+filter.getWord());
}
}
输入样例:
footBall
输出样例:
输出原单词和过滤后的单词,例如:
true true
请输入一个英文单词:
原单词是:footBall
过滤处理后:Football
原单词是:programmING
过滤处理后:Programming
题目分析:
题目要求大概两部分:
1.
2.
刚刚学了接口,就可以派上用场了。
定义接口:
代码:因为题干要求,我们直接写在一个java文件里,只有一个public 类,interface前面也不加public
interface Filter
{
public void doFilter();
}
定义类:相关知识点和细节不再展开
class WordFilter implements Filter
{
private String word;//表示待进行过滤的单词
public void setWord(String word)
{
this.word = word;
}
public String getWord()
{
return word;
}//setter和getter方法
public WordFilter(String word)
{
this.word = word;
}//有参构造器
}
我们常说:做一道题总要学点东西:
学点新东西:
我们在这里介绍几个方法:
- toUppercase() --- 全变成大写
- toLowercase() ---全变成小写
- concat() --- 字符串拼接
- substring() --- 字符串截取
我们在学习新的方法知道了大概功能,先在API文档,看看它的出处,是否需要我们导包,再看它的参数和返回。
lang包不需要手动导入 :
1.Object类是所有类的父类,我们不写,但都默认继承,就看我们会不会用了
2.提前下好了,所以以后查到是lang包的方法,我们都不导包
全都是lang包,那跳过导包这一步。
大小转换
使用的时候,就是当前该字符串对象调用该方法。无参数,返回一个字符串:就是对象全部变成大写。
小写也是同样的道理,字符串对象.toLowercase();
字符串拼接
API文档如下:
参数是要拼接在字符串对象后面的字符串,返回一个拼好的字符串。
字符串截取
参数是俩个int型,表示字符下标,前一个int是开始索引,后一个int是结束索引;至于得到的字符有包含前面一个int下标的字符,后一个int的下标不包含在内。我们大胆猜测,这个方法的源代码可能是把后一个int下标的字符变成了'/0';
比如:humberger,我们要得到umber,substring里面的参数是什么呢?
u的下标是1,r下标是5,我们要的后面的一个int变成'\0'的话,就是取6,前一个就是1。所以,参数列表是(1,6)
这也是上图中参数:包括在内,是指要得到的字符串包括了前一个参数下标的字符。独占,是变成'\0‘.
接口实现:将word字符串的首字母大写,其余字母全小写
我们结合上面介绍的几个方法,思路大概如下:
我们把首字母和其余部分分别处理,首字母用toUppercase(),其余部分就用toLowercase(),至于最后要得到一个完整的字符串,我们就用字符串拼接方法,把这俩个字符串拼起来。
第一步就是把首字母和其余部分分开,我们可以用俩次字符串截取方法。
思路如上,代码实现:
class WordFilter implements Filter
{
//...
public void doFilter()//接口实现,记得主动public
{
String s1 = word.substring(0,1);//使用的String类的方法,肯定先有对象再调用相应的方法
String s2 = word.substring(1,word.length());//String类的方法求长度,对象.length()
String s3 = s1.toUpperCase();//对首字母大写操作
String s4 = s2.toLowerCase();//对其余部分小写操作
String s5 = s3.concat(s4);//拼接字符串,参数里的字符串拼接到原字符串对象的末尾
word = s5;//细节:最后得到的字符串赋给word,或者真正说法是让word指向s5,把s5的地址赋给word
}
}
okok,完整代码参考:
interface Filter
{
public void doFilter();
}
class WordFilter implements Filter
{
String word;//表示待进行过滤的单词
public void setWord(String word)
{
this.word = word;
}
public String getWord()
{
return word;
}
public WordFilter(String word)
{
this.word = word;
}
public void doFilter()
{
String s1 = word.substring(0,1);
String s2 = word.substring(1,word.length());
String s3 = s1.toUpperCase();
String s4 = s2.toLowerCase();
String s5 = s3.concat(s4);
word = s5;
}
}