導航:首頁 > 編程語言 > java字元串通配符

java字元串通配符

發布時間:2023-01-24 04:07:11

java方法參數中的泛型通配符要怎麼理解

泛型可以用"<T>"代表,任意類型的。
解釋: 「<T>」是泛型的默認值,可以被任意類型所代替,如:
List<String> list = new ArayList<String>();這個就定義了一個String類型的」泛型「集合,那麼T的類型就是字元串。
List<T> list = new ArayList<T>();
可以賦值給list:list.add("StringBatch");
可以獲取到list的值:list.get(0),結果就是」StringBatch「;
這個時候T的類型也是String。也就是說T是動態的,可以被任意指定類型。

文件刪除時支持通配符 Java

package org.example;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class FileUtil {

/**
* 刪除指定目錄下符合指定<param>pattern</param>的文件或目錄
* @param path
* 指定的目錄
* @param pattern
* 要刪除的目標,可以含通配符(*)
* 如:x*d\*.bak,為指定目錄下以x開頭d結尾的目錄下的所有bak文件
* @return
* true, 沒有錯誤;false, 發生了錯誤
*/
public static boolean delete(String path, String pattern) throws Exception {
if( path == null || pattern == null )
throw new IllegalArgumentException("參數為空");
boolean result = true;

File root = new File(path);
if( !root.isDirectory() || !root.exists() )
throw new IllegalArgumentException("不是目錄或者目錄不存在");

List<File> folderBuffer = new ArrayList<File>();
folderBuffer.add(root);

String[] ps = pattern.split("\\" + File.separator);
for(int i = 0; i < ps.length; i ++) {
List<File> tmpList = new ArrayList<File>();
while(folderBuffer.size() > 0) {
File folder = folderBuffer.remove(0);
List<File> fileMatched = applyPattern(folder, ps[i]);
tmpList.addAll(fileMatched);
}
folderBuffer.addAll(tmpList);

if( folderBuffer.size() == 0 )
return true;
}
for(int i = 0; i < folderBuffer.size(); i ++) {
boolean r = deleteFile(folderBuffer.get(i));
if( !r )
return r;
}

return result;
}

private static boolean deleteFile(File f) {
trace("DELETE: " + f.getPath());
if( f.isFile() )
return f.delete();

// 目錄也有可能滿足通配符!
// 是否執行刪除帶有文件的目錄?自己判斷,這里直接刪,不管成功失敗
return f.delete();
}

/**
* 將含通配符(*)的字元串轉變成正則表達式
* @param pattern
* @return
* @remark
* 這里做得比較簡單,只是替換了"."和"*",實際情況可能還有其他字元需要替換
*/
private static Pattern createPattern(String pattern) {
String _pattern = pattern.replaceAll("\\.", "\\\\.").replaceAll("\\*", ".*");
Pattern p = Pattern.compile(_pattern, Pattern.CASE_INSENSITIVE);
return p;
}

private static List<File> applyPattern(File folder, String pattern) {
List<File> list = new ArrayList<File>();
if( folder == null || folder.isFile() || pattern == null )
return list; // 空List

Pattern p = createPattern(pattern);

File[] files = folder.listFiles();
for(int i = 0; i < files.length; i ++) {
File file = files[i];
String name = file.getName();
Matcher m = p.matcher(name);
if( m.matches() ) {
list.add(file);
trace("[ M] Folder: " + folder + ", Pattern: " + pattern +
", File: " + name + " <-----Matched----");
}
else {
trace("[NM] Folder: " + folder + ", Pattern: " + pattern +
", File: " + name);
}
}

return list;
}

private static void trace(String message) {
System.out.println(message);
}

public static void main(String[] args) throws Exception {
trace("警告:請按照您自己的要求修改程序,風險自負。");
FileUtil.delete("F:\\temp", "*x1\\*.exe");
}
}

⑶ Java中什麼是通配符

java中的通配符由?表示,應用場景是在方法的形參上使用,為了彌補泛型機制帶來的參數傳遞問題,主要有三種通配符分類 無界通配:?,子類限定:? extends Object,父類限定:? super Integer。

⑷ Java中通配符可以用在哪些地方

第一java關鍵字中沒有通配符。第二,java的regexp包可以用通配符去解析字元串。1.5以後,這此特性已經直接集成到string類中了。

⑸ java 通配符匹配字元串

我記得在String類中有一個matches(reg)方法,可以加正則表達式判定是否符合要求,
String string ="110_1565121651.tmp";
boolean flag=string.matches("110_[0-9]+\\.tmp");
System.out.println("flag="+flag);
試下是不是這版樣,我了是初學權者,如不對,請見諒。

⑹ java 實現字元串通配符

^private static boolean wildMatch(String pattern, String str) {
pattern = toJavaPattern(pattern);
return java.util.regex.Pattern.matches(pattern, str);
}

private static String toJavaPattern(String pattern) {
String result = "^";
char metachar[] = { '$', '^', '[', ']', '(', ')', '{', '|', '*', '+', '?', '.', '//' };
for (int i = 0; i < pattern.length(); i++) {
char ch = pattern.charAt(i);
boolean isMeta = false;
for (int j = 0; j < metachar.length; j++) {
if (ch == metachar[j]) {
result += "/" + ch;
isMeta = true;
break;
}
}
if (!isMeta) {
if (ch == '*') {
result += ".*";
} else {
result += ch;
}

}
}
result += "$";
return result;
}

public static void main(String[] args) {
test("*", "toto");
test("toto.java", "tutu.java");
test("12345", "1234");
test("1234", "12345");
test("*f", "");
test("***", "toto");
test("*.java", "toto.");
test("*.java", "toto.jav");
test("*.java", "toto.java");
test("abc*", "");
test("a*c", "abbbbbccccc");
test("abc*xyz", "abcxxxyz");
test("*xyz", "abcxxxyz");
test("abc**xyz", "abcxxxyz");
test("abc**x", "abcxxx");
test("*a*b*c**x", "aaabcxxx");
test("abc*x*yz", "abcxxxyz");
test("abc*x*yz*", "abcxxxyz");
test("a*b*c*x*yf*z*", "aabbccxxxeeyffz");
test("a*b*c*x*yf*zze", "aabbccxxxeeyffz");
test("a*b*c*x*yf*ze", "aabbccxxxeeyffz");
test("a*b*c*x*yf*ze", "aabbccxxxeeyfze");
test("*LogServerInterface*.java", "_LogServerInterfaceImpl.java");
test("abc*xyz", "abcxyxyz");
}

private static void test(String pattern, String str) {
System.out.println(pattern+" " + str + " =>> " + wildMatch(pattern, str));
}

⑺ java里的泛型和通配符

解釋這樣的,希望可以被採納為答案:
1.先解釋最中間的括弧:某一個對象A繼承了K這個類,某一個對象B繼承V這個類
2. Map.Entry是map中的一個方法,該方法可以返回一個對象的集合,那麼現在得這個集合就是,A,B所組成的集合
3.iterator迭代器類似於for循環,將A,B這個集合迭代出來,取出A,B單獨的對象

希望我的回答你滿意。

⑻ java通配符類型

如:import java.util.*;表示的是引入util包下的所有類;

如:*.java;表示的是查找後綴為java的所有文件;

如:List<T> list = new ArayList<T>();表示定義了一個通配的list對象,可以代表任何對象的list。

閱讀全文

與java字元串通配符相關的資料

熱點內容
電腦qq怎麼傳文件到手機qq 瀏覽:417
被360隔離的文件在哪個文件夾 瀏覽:971
骷髏教程圖 瀏覽:954
ps淘寶女包修圖教程 瀏覽:568
55公里app 瀏覽:556
欠費多少充多少為啥還用不了數據 瀏覽:607
蘋果7如何使用萬能鑰匙 瀏覽:254
微信文件傳送電腦 瀏覽:600
什麼app可以解壓百度雲rar 瀏覽:627
蘋果6sp換殼 瀏覽:956
海盜船k70rgb燈光配置文件 瀏覽:336
linuxfsstat 瀏覽:926
電腦文件有個鎖 瀏覽:441
ps多張pdf文件夾 瀏覽:2
怎樣壓縮文件能傳到qq郵箱 瀏覽:923
南昌房管局網站怎麼查備案 瀏覽:884
如何設置ipad下載密碼 瀏覽:458
ae信號干擾教程 瀏覽:548
電腦之前刪掉的文件怎麼找 瀏覽:805
索尼z1刷什麼系統升級 瀏覽:466

友情鏈接