zoukankan      html  css  js  c++  java
  • 过滤器+递归

    过滤器

    File类中重载的listFiles方法,可以接受指定的过滤器。

    listFiles(FileFilter filter) 也可以接受一个FileFilter过滤器FilenameFilter过滤器中的accept方法接受两个参数,一个当前文件或文件夹所在的路径,一个是当前文件或文件夹对象的名称。

    过滤器就是创建一个类,重写accept方法,制定自己的过滤规则。

    过滤器代码:

    public class MyFilterb implements FileFilter {
        
        public boolean accept(File pathname) {
            //过滤器文件
            if(pathname.isFile()){
                /*//获取文件名
                String name=pathname.getName();
                //将文件名转为小写
                name=name.toLowerCase();
                //判断文件名是否以.txt结尾
                boolean flag=name.endsWith(".txt");
                return flag;*/
                /*上述方法使用相对麻烦一点,可以直接使用方法调用来达到自己的目的,最终获得以.txt结尾的文件*/
                return pathname.getName().toLowerCase().endsWith(".txt");
            }else{
                return false;
            }
        }
    }
    代码:
    public
    static void main(String[] args) { // 明确文件夹位置 File file=new File("E:\io1127"); //获取该文件夹中符合规则的文件
         //此处的结果是一个File数组
    File[] files=file.listFiles(new MyFilterb()); //遍历 for(File f:files){ System.out.println(f); } }

    文件过滤流程如下图所示:

    pathname的对象是io1127中每一个文件或文件夹

    io1127中所有的文件或文件夹当调用listFiles()方法时,会传输一个过滤器对象,过滤器会找到file对象(io1127)下的第一条文件或文件夹传给new MyFilter,然后会找到accept方法传给pathname,此时return true,说明a文件符合条件,把file对象装到File[]中,此时会遍历io1127,如果继续满足条件,继续装到File[]中,File数组就会装满,遍历会得到五条数据

    accept方法会对指定路径的文件或文件夹一一进行过滤,只要对File pathname的File对象一一进行筛选,那么返回的值符合条件,那么就过滤。

    二.递归

    就是在当前方法内自己调用自己的现象。

    递归分为两种,直接递归和间接递归。

    直接递归称为方法自身调用自己。间接递归可以A方法调用B方法,B方法调用C方法,C方法调用A方法。

    代码演示:

    //栈内存溢出
    public
    static void main(String[] args) { a(); } public static void a(){ System.out.println("aa"); a(); }
    }

    递归的使用是一定要有条件限制的,不能无限制的递归下去,一定要保证它能停下来,否则就会发生栈内存溢出,同时次数也不能太多,要不然也会发生栈内存溢出。

    递归例子:

    public static void main(String[] args) {
            System.out.println(get(10));
        }//计算1-100和
      //规律:100+(100-1)+(99-1)+(98-1)+(97-1)...1
    public static int get(int n){ if(n==1){ return 1; } return n+get(n-1); } //斐波那契数列 1 1 2 3 5 8 13 依次增加 public static int create(int n){ if(n==1){ return 1; } if(n==2){ return 1; } return create(n-1)+create(n-2); }

    图解示例:

    递归要找到规律才可以方便使用,找不到相应的规律,是无法进行写代码的

  • 相关阅读:
    ? 这是个很好的问题。Go 当前的 GC 显然做了一些额外的工作,但它也跟其他的工作并行执行,所以在具有备用 CPU 的系统上,Go 正在作出合理的选择。请看 https://golang.org/issue/17969 结束语(Closing notes) 通过研究 Go 垃圾收集器,我能够理解 Go GC 当前结构的背景以及它如何克服它的弱点。Go发展得非常快。如果你对 Go感兴趣,最好继
    Kombu is a messaging library for Python.
    pencil
    io loop select
    gevent 缺点
    pyopenssl
    秒杀系统“减库存”设计的核心逻辑
    Gokit微服务-服务链路追踪
    Go 代码审查建议
    Visual Studio Team Systems
  • 原文地址:https://www.cnblogs.com/xinzong/p/14444976.html
Copyright © 2011-2022 走看看