日期:2014-05-20  浏览次数:20717 次

帮忙注释一下这个字符串匹配方法,没看懂呀
Java code
import java.io.*;
import java.util.*;

public class FileDemo06 {
    //查找符合条件的文件,并返回一个文件名列表
    public static List<File> findFiles(String baseDirName, String targetFileName, int count) {
        LinkedList<File> fileList = new LinkedList<File>();    //创建一个列表,里面装目录或子目录

        LinkedList<File> fileList2 = new LinkedList<File>();    //创建一个列表,里面装搜到的文件

        File baseDir = new File(baseDirName);
        if(!baseDir.exists() || !baseDir.isDirectory()) {
            System.out.println("文件查找失败," + baseDirName + " 不是一个目录!");
            return fileList2;
        }
        String tempName = null;
        fileList.addLast(baseDir);
        File tempFile = null;
        while(!fileList.isEmpty()) {
            tempFile = fileList.removeFirst();            //将列表中的第一个元素取出并删除
            if(tempFile.exists() && tempFile.isDirectory()) {
                File[] files = tempFile.listFiles();
                for(int i = 0; i < files.length; i ++) {
                    //如果是目录则放进队列
                    if(files[i].isDirectory())
                        fileList.add(files[i]);
                    else {
                        //如果是文件则根据文件名与目标文件名进行匹配
                        tempName = files[i].getName();
                        if(matchWord(targetFileName, tempName)) {
                            //匹配成功,将文件名添加到结果集
                            fileList2.add(files[i].getAbsoluteFile());
                            //如果已经达到指定的数目,则退出循环
                            if(count != 0 && fileList2.size() > count) {
                                return fileList;
                            }
                        }
                    }
                }
            }
        }
        return fileList2;
    }

    //文件名的通配符匹配,如果匹配成功则返回 true,否则返回 false
    public static boolean matchWord(String pattern, String str) {
        int patternLength = pattern.length();
        int strLength = str.length();
        int strIndex = 0;
        char ch;
        for(int patternIndex = 0; patternIndex < patternLength; patternIndex ++) {
            ch = pattern.charAt(patternIndex);
            if(ch == '*') {                        //通配符 * 表示可以匹配任意多个字符
                while(strIndex < strLength) {
                    if(matchWord(pattern.substring(patternIndex + 1), str.substring(strIndex))) {
                        return true;
                    }
                    strIndex ++;
                }
            }
        HTTP/1.1 200 OK
Server: nginx/0.7.68
Date: Fri, 02 Nov 2012 02:14:23 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: ASP.NET
Last-modified: 2012-10-23 17:58:48
Content-Length: 159016
Cache-control: private








50分相送,急问Hbiernate中“insert into select”的写法? - Java / Java SE