Java-接口-定义接口Filter及其实现类WordFilter

所谓:“纸上得来终觉浅,绝知此事要躬行。”

关于接口的知识,可以几分钟过一遍:Java-接口—知识(基础)-CSDN博客

现在就是练习time,先来看题:

 

定义一个接口 Filter,表示过滤器,其定义的如下:

  1. Filter接口有一个抽象方法:public void doFilter(); 表示进行过滤操作。

定义一个类:WordFilter:

WordFilter表示单词过滤器,该类要实现Filter接口,实现其doFilter()方法,实现过滤单词,将单词的首字母转换为对应的大写字母,剩余的字母全小写;

对于WordFilter类的要求如下:

  1. 一个String类型的成员变量 word,表示待进行过滤的单词,并定义该变量的setter和getter方法;
  2. 带参数的构造方法,实例化过滤器对象时,按参数值初始化成员变量word的值;
  3. 实现doFilter方法,在实现的doFilter方法中,将word字符串的首字母大写,其余字母全小写;
  4. 对于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;
     }//有参构造器

}

我们常说:做一道题总要学点东西:

学点新东西: 

我们在这里介绍几个方法:

  1. toUppercase() --- 全变成大写
  2. toLowercase() ---全变成小写
  3. concat() --- 字符串拼接
  4. 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;  
       }
     }

    


 

 
  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值