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;  
       }
     }

    


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/527461.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索算力(云计算、人工智能、边缘计算等):数字时代的引擎

引言 在数字时代&#xff0c;算力是一种至关重要的资源&#xff0c;它是推动科技创新、驱动经济发展的关键引擎之一。简而言之&#xff0c;算力即计算能力&#xff0c;是计算机系统在单位时间内完成的计算任务数量或计算复杂度的度量。随着科技的不断发展和应用范围的不断扩大…

Java基础笔记(一)

一、面向对象高级基础 1.Java的动态绑定机制 public class DynamicBinding {public static void main(String[] args) {//a 的编译类型 A, 运行类型 BA a new B();//向上转型System.out.println(a.sum());//40 子类sum()注释后-> 30System.out.println(a.sum1());//30 子类…

鸿蒙实战开发-相机和媒体库、如何在eTS中调用相机拍照和录像

介绍 此Demo展示如何在eTS中调用相机拍照和录像&#xff0c;以及使用媒体库接口将图片和视频保存的操作。实现效果如下&#xff1a; 效果预览 使用说明 1.启动应用&#xff0c;在权限弹窗中授权后返回应用&#xff0c;进入相机界面。 2.相机界面默认是拍照模式&#xff0c;…

微软edge浏览器上网、下载速度慢,如何解决??

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

win10如何关闭键盘灯,win10系统键盘灯怎么关闭

操作电脑的时候&#xff0c;相信大家都离不开鼠标和键盘吧&#xff0c;为了提升体验感&#xff0c;很多用户喜欢使用一些带灯光的键盘&#xff0c;有些还有好几种颜色&#xff0c;甚至还有动态的。像这种带灯光的键盘&#xff0c;在打游戏时能够把氛围感拉满。不过有用户表示&a…

echarts折线图自定义打点标记小工具

由于没研究明白echarts怎么用label和lableLine实现自定义打点标记&#xff0c;索性用markPoint把长方形压扁成线模拟了一番自定义打点标记&#xff0c;记录下来备用。&#xff08;markLine同理也能实现&#xff09; 实现代码如下&#xff1a; <!DOCTYPE html> <html…

自然语言处理-词向量模型-Word2Vec

目录 一、前言 二、词向量 三、词向量的实际意义 四、模型的整体框架 五、构建输入数据 六、不同模型的对比 七、负采样方案 八、总结 一、前言 计算机只认识数值数字&#xff0c;那么怎么认识自然语言呢&#xff1f;&#xff1f;&#xff1f;答案就是将自然语言转换转…

SpringCloud Alibaba @SentinelResource 注解

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十五篇&#xff0c;即介绍 SpringCloud Alibaba 的 SentinelResource 注解。 二、简介 这个注解用于标…

Rust那些事之Borrow VS AsRef​

最近看到两个trait长得挺像&#xff0c;带着疑惑前来学习一下。 Borrow VS AsRef Borrow与AsRef是Rust中非常相似的两个trait&#xff0c;分别是&#xff1a; pub trait Borrow<Borrowed: ?Sized> {fn borrow(&self) -> &Borrowed; }pub trait AsRef<T: ?…

threejs 组-层级模型 | 本地坐标和世界坐标 | 局部坐标系和世界坐标系 | 本地矩阵.materix和世界矩阵.matrixWorld

文章目录 组- THREE.Group递归遍历模型树结构object3D.traverse()object3D.add (object.Object3D..) 添加对象 和 object3D.remove(object.Object3D..) 移除对象 局部坐标系和世界坐标系辅助坐标器 AxesHelper 本地坐标和世界坐标 - 基于世界坐标系的位置本地坐标与世界坐标的理…

常用的深度学习自动标注软件

0. 简介 自动标注软件是一个非常节省人力资源的操作&#xff0c;而随着深度学习的发展&#xff0c;这些自动化标定软件也越来越多。本文章将会着重介绍其中比较经典的自动标注软件 1. AutoLabelImg AutoLabelImg 除了labelimg的初始功能外&#xff0c;额外包含十多种辅助标注…

机器人码垛机:科技创新推动物流行业飞跃发展

在数字化、智能化浪潮的推动下&#xff0c;机器人技术已成为推动各行各业转型升级的重要力量。特别是在物流行业&#xff0c;机器人码垛机的应用正逐渐普及&#xff0c;以其高效、精准、节省人力的特点&#xff0c;助力物流行业实现跨越式发展。星派将介绍机器人码垛机如何助力…

nacos分布式程序开发实例

1.通过windows docker desktop 完成 nacos 的安装/启动/配置 &#xff08;1&#xff09;先安装docker desktop docker-toolbox-windows-docker-for-windows-stable安装包下载_开源镜像站-阿里云 &#xff08;2&#xff09;配置docker 国内镜像源 Docker 镜像加速 | 菜鸟教程…

C++ list链表模拟实现

目录 前言&#xff1a; 模拟实现&#xff1a; 迭代器的实现&#xff1a; list类功能函数实现&#xff1a; 初始化成空函数&#xff08;empty_init&#xff09;&#xff1a; 构造函数&#xff1a; 拷贝构造函数&#xff1a; 尾插&#xff08;push_back&#xff09;: 插入…

【触想智能】工业一体机和普通电脑的区别是什么?

工业一体机和普通电脑的区别是什么&#xff0c;工业一体机可以当普通电脑一样使用吗? 要想了解工业一体机和普通电脑的区别是什么?我们首先来看看工业一体机是什么&#xff0c;它跟普通电脑有哪些相似的地方?下面小编就为大家来详细介绍一下。 在工作原理上&#xff0c;工业…

GFS分布式 文件系统

一、GFS的概念 文件存储分为nfs、lvm、raid 对象存储分为GFS、CEPH、fastDFS&#xff08;分布式文件存储&#xff09;NAS OSS S3 switch OSS 属于阿里云 通过URL 链接 S3属于亚马逊通过URL链接 1.1 GFS简介 开源的分布式文件系统&#xff0c;由存储服务器、客户端…

Pillow教程11:九宫格切图的实现方法(安排!!!)

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

xv6源码分析 003

xv6源码分析 003 在开始今晚的内容之前我先纠正以下昨天的一个错误 struct cmd {int type; };代表的是在sh.c开头就定义的宏常量&#xff0c;系统调用号是通过汇编代码来传入的。修改之后的内容如下&#xff1a; 好啦&#xff0c;我们继续昨晚的内容吧。 在sh.c 的 main函数中…

大屏可视化展示平台解决方案(word原件获取)

1.系统概述 1.1.需求分析 1.2.重难点分析 1.3.重难点解决措施 2.系统架构设计 2.1.系统架构图 2.2.关键技术 2.3.接口及要求 3.系统功能设计 3.1.功能清单列表 3.2.数据源管理 3.3.数据集管理 3.4.视图管理 3.5.仪表盘管理 3.6.移动端设计 3.1.系统权限设计 3.2.数据查询过程设…

如何使用vscode启动Flask并实现无公网IP远程访问内网服务

文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask&#xff0c;以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架&#xff0c;采用Python编程语…