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泛