1. 程式人生 > >Java 萬用字元匹配查詢檔案

Java 萬用字元匹配查詢檔案

=============================

字串匹配例子

     String s = "*txt.*";
      s = s.replace('.', '#');
      s = s.replaceAll("#", "////.");
      s = s.replace('*', '#');
      s = s.replaceAll("#", ".*");
      s = s.replace('?', '#');
      s = s.replaceAll("#", ".?");
      s = "^" + s + "$";
    
      System.out.println(s);
      Pattern p = Pattern.compile(s);
    
      ArrayList list = new ArrayList();
      list.add("aabc.txt");
      list.add("sdfsdfaabc.txt.asdasd");
      list.add("aabcd.txt");
      list.add("aabcdtxt.sadf");
      list.add("abc.txt");
    
      Matcher fMatcher = null;
      String s1 = null;
      int size = list.size();
      for(int i=0;i<size;i++)
      {
        s1 = (String)list.get(i);
        fMatcher = p.matcher(s1);
        if(fMatcher.matches())
        {
          System.out.println(s1);
        }
      }

===========================================

實用的模糊(萬用字元)檔案查詢程式

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;

/**
* <p>Title: FileService </p>
* <p>Description: 獲取檔案 </p>
* <p>Copyright: Copyright (c) 2007</p>
* <p>Company: </p>
* @author not attributable
* @version 1.0
*/
public class FileService {
   public FileService() {
   }

   /**
    * 在本資料夾下查詢
    * @param s String 檔名
    * @return File[] 找到的檔案
    */
   public static File[] getFiles(String s)
   {
     return getFiles("./",s);
   }
  
   /**
    * 獲取檔案
    * 可以根據正則表示式查詢
    * @param dir String 資料夾名稱
    * @param s String 查詢檔名,可帶*.?進行模糊查詢
    * @return File[] 找到的檔案
    */
   public static File[] getFiles(String dir,String s) {
     //開始的資料夾
     File file = new File(dir);

     s = s.replace('.', '#');
     s = s.replaceAll("#", "////.");
     s = s.replace('*', '#');
     s = s.replaceAll("#", ".*");
     s = s.replace('?', '#');
     s = s.replaceAll("#", ".?");
     s = "^" + s + "$";

     System.out.println(s);
     Pattern p = Pattern.compile(s);
     ArrayList list = filePattern(file, p);

     File[] rtn = new File[list.size()];
     list.toArray(rtn);
     return rtn;
   }

   /**
    * @param file File 起始資料夾
    * @param p Pattern 匹配型別
    * @return ArrayList 其資料夾下的資料夾
    */

   private static ArrayList filePattern(File file, Pattern p) {
     if (file == null) {
       return null;
     }
     else if (file.isFile()) {
       Matcher fMatcher = p.matcher(file.getName());
       if (fMatcher.matches()) {
         ArrayList list = new ArrayList();
         list.add(file);
         return list;
       }
     }
     else if (file.isDirectory()) {
       File[] files = file.listFiles();
       if (files != null && files.length > 0) {
         ArrayList list = new ArrayList();
         for (int i = 0; i < files.length; i++) {
           ArrayList rlist = filePattern(files[i], p);
           if (rlist != null) {
             list.addAll(rlist);
           }
         }
         return list;
       }
     }
     return null;
   }

   /**
    * 測試
    * @param args String[]
    */
   public static void main(String[] args) {
   }
}

相關推薦

Java 字元匹配查詢檔案

============================= 字串匹配例子      String s = "*txt.*";      s = s.replace('.', '#');      s = s.replaceAll("#", "////.");      s =

leetcode 44 ---- 動態規劃(困難) :字元匹配java

1.  問題:給定一個字串 (s) 和一個字元模式 (p) ,實現一個支援 '?' 和 '*' 的萬用字元匹配。 '?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小

Leetcode 44:字元匹配(超詳細的解法!!!)

給定一個字串 (s) 和一個字元模式 (p) ,實現一個支援 '?' 和 '*' 的萬用字元匹配。 '?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小寫字母。

[Luogu P3167] [BZOJ 3507] [CQOI2014]字元匹配

洛谷傳送門 BZOJ傳送門 題目描述 幾乎所有作業系統的命令列介面(CLI)中都支援檔名的萬用字元匹配以方便使用者。最常見的萬用字元有兩個,一個是星號(*),可以匹配 0

D-動態規劃比遞迴快-LeetCode44-字元匹配

題目 給定一個字串 (s) 和一個字元模式 (p) ,實現一個支援 '?' 和 '*' 的萬用字元匹配。 '?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小寫字母。 p 可能為空,且只包含

字元匹配

給定一個字串 (s) 和一個字元模式 § ,實現一個支援 ‘?’ 和 ‘*’ 的萬用字元匹配。 ‘?’ 可以匹配任何單個字元。 ‘*’ 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小寫字母。 p 可能為空,且只包含

leetcode 44. 字元匹配

給定一個字串 (s) 和一個字元模式 (p) ,實現一個支援 '?' 和 '*' 的萬用字元匹配。 '?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹

Java字元+註解

一、泛型的萬用字元 1.萬用字元使用的場景     方法的引數 2.萬用字元的優點     使方法更加通用 3.萬用字元分類 無界通配:? 子類限定:? extends Object 父類限定:?  super Integer 4.萬用字元的缺點 使變數使用上

【leetCode】44_字元匹配

dp: class Solution { public: bool isMatch(string s, string p) { //tag 用於dp,tag[i][j]代表s的子串s[0,i-1] 可以匹配 p的子串p[0,j-1]。

【LeetCode】44. 字元匹配

題目描述 思路(與10. 正則表示式匹配類似) dp[ i ][ j ] 表示 s 的前 i 個字元與 p 的前 j 個字元的匹配結果。 先寫邊界情況,再寫 dp 方程,若 p[ j - 1] 為 * ,dp[ i ][ j ] = dp[ i - 1][ j

正則化與字元便於查詢和替換批量處理,使用在word,notepad++等文字編輯器中

我們常常使用查詢替換的方式來處理相關資料,可是當你要批量替換隻用一些相同字元分文字時,就會顯得很笨拙。 比如:     Line 5974: DI 10.13182/NT96-A15844     Line 6078: DI 10.1109/ISIC.1996.55623

字元匹配_講解和python3實現

題目描述 給定一個字串 (s) 和一個字元模式 § ,實現一個支援 ‘?’ 和 ‘*’ 的萬用字元匹配。 ‘?’ 可以匹配任何單個字元。 ‘*’ 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小寫字母。 p 可能

LeetCode 10 & 44 正則表示式匹配 & 字元匹配 字串匹配問題

10 正則表示式匹配 給定一個字串 (s) 和一個字元模式 (p)。實現支援 ‘.’ 和 ‘*’ 的正則表示式匹配。 ‘.’ 匹配任意單個字元。 ‘*’ 匹配零個或多個前面的元素。 匹配應該覆蓋整個字串 (s) ,而不是部分字串。 說明: s 可能為

java字元的詳解

在java中,?代表萬用字元。 萬用字元用法 1. 在例項化物件的時候,不確定泛型引數的具體型別時,可以使用萬用字元進行物件定義 2. <? extends Object>代表上邊界限定萬用字元 3. <? super Objec

44. 字元匹配

給定一個字串 (s) 和一個字元模式 (p) ,實現一個支援 '?' 和 '*' 的萬用字元匹配。 '?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。 兩個字串完全匹配才算匹配成功。 說明: s 可能為空,且只包含從 a-z 的小寫字母。 p

LintCode (192)字元匹配

題目 判斷兩個可能包含萬用字元“?”和“*”的字串是否匹配。匹配規則如下: '?' 可以匹配任何單個字元。 '*' 可以匹配任意字串(包括空字串)。 兩個串完全匹配才算匹配成功。 函式介面如下: bool isMatch(const char *s, const

Java字元的個人理解(以集合為例)

二、泛型萬用字元講解  <一>萬用字元的使用以及程式碼演示       1.無限萬用字元<?>的使用:可以傳入任何引用資料型別 A 在呼叫方法時使用?萬用字元的過程中無法使用add方法。原因分析:因為萬用字元?代表任意的資料型別,但是當我們呼叫的時候或者用在方法的宣告上,其實這個

bzoj3507 [Cqoi2014]字元匹配

我們將題目輸入的那個含萬用字元的串,記為“萬用字元串”,下面的檔名記為“檔名”,“檔名”數量很少可以依次查詢。 我們先將“萬用字元串”以‘*’為界,將“萬用字元串”分解,得到若干子串,記為“通配子串” 我們將每個“通配子串”各建立一個AC自動機。 而有的“通配子串”可能含

String、動態規劃——wildcard-matching 字元匹配

Implement wildcard pattern matching with support for'?'and'*'. '?' Matches any single character. '*' Matches any sequence of characters

Java基礎]Java字元

轉自:http://peiquan.blog.51cto.com/7518552/1303768 本以為這會是一篇比較基礎的部落格,可一旦深究的時候,才發現很多有意思的東西,也發現了很多令人迷惑的地方。萬用字元是一個有趣的東西,如果你掌握了,會使你的程式碼更為通用(健壯性更強)。首先本文是在建立在java泛