导航:首页 > 编程语言 > java通配符

java通配符

发布时间:2024-01-20 04:25:54

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

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 class<>是什么意思

List list = "......";
Student stu = new Student();
stu = list.get(0);
System.out.println(stu.getName());
上面的代码等同于下面,其实就是版泛型。权
List <Student>list = "....";
System.out.println(list.get(0).getName());

⑷ java 通配符匹配字符串

我记得在String类中有一个matches(reg)方法,可以加正则表达式判定是否符合要求,
String string ="110_1565121651.tmp";
boolean flag=string.matches("110_[0-9]+\\.tmp");
System.out.println("flag="+flag);
试下是不是这版样,我了是初学权者,如不对,请见谅。

⑸ java程序中调用带通配符*的unix系统命令

*这个已经是很顽固的问题了,如果不爱用ListFile的话

可以变通下

find .-name "test" -exec rm -f {} \;

⑹ 在java中,〈extends A 〉与〈T extends A〉有什么区别

这是泛型嘛,泛型简单的意思就是说,你不知道你想要的这个类具体是啥,但是你可以知道这个类的相关子类或者父类


所以从上面的观点来看,<? extends A> 和 <T extends A>是没啥区别的

例如下面这个两个方法表达的意思是一样的,都表示参数是一个集合,这个集合可能包含着A或者A的任何子类

publicvoidsomeMethod(List<?extendsA>list);
publicvoidsomeMethod(List<TextendsA>list);

这是一种情况,但是相比而言,一个类中,多处方法都需要这个泛型的时候,<T extends A>要比<? extends A> 方便的多,就像在代码里,你声明了一个变量后,你就可以在这个变量的代码块里任何地方调用,同理<T extends A>就像是声明了一个泛型变量T,这个T是一个A或者A的子类,然后这个变量T在所能用的范围之内,你都可以直接用T表示,不用再写<? extends A>或者<T extends A>,比如:


//前面定义了T,后面参数就可以用T表示了
public<TextendsA>voidsome(List<T>t);

上面是方法里,这个范围比较窄,放在类里,效果更明显,比如:

publicclassB<TextendsA>{
//一个A类或者A子类的变量
privateTa;

//一个方法
publicvoidsome(List<T>list);
}

所以可以看到,差别也不太大

⑺ java 集合中泛型通配符 用了之后就不能添加 元素了 为什么

首先泛型是用来约束的(或者说是规范化),泛型的本质是参数化类型,不是用来通配的(这个说法也不完全对),这个概念一定不要混淆了。

你添加的元素是String类型的,那么你的代码就得这样:

ArrayList<String>arr=newArrayList<String>();

或者:

List<String>arr=newArrayList<String>();//多态,推荐使用

再或者:

Listarr=newArrayList();
ArrayListarr=newArrList();//这两种没有用泛型,编译器会提示警告

用上面1和2方式的话,你的arr集合就只能存放String类型对象,3没有用泛型,什么类型的对象都可以存放。只是取出来的时候,会要类型转换,这个过程很容易出错。

希望我的回答能对你有所帮助,荣幸之至。

⑻ java通配符类型

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

如:*.java;表示的是查找后缀为java的所有文件;

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

⑼ java泛型无界通配符和原生的区别什么

无界通配符<?>看起来意味着“任何事物”,因此使用无界通配符好像等价于使用原生类型。实际上,List表示“持有任何Object类型的原生List”,而List<?>表示“具有某种特定类型的非原生List

阅读全文

与java通配符相关的资料

热点内容
微信相册程序图标 浏览:714
win8怎么显示文件格式 浏览:547
文件服务器中毒 浏览:721
如何修改网站访问次数 浏览:518
mdfldf是什么文件 浏览:569
文件在桌面怎么删除干净 浏览:439
马兰士67cd机版本 浏览:542
javaweb爬虫程序 浏览:537
word中千位分隔符 浏览:392
迷你编程七天任务的地图怎么过 浏览:844
word2003格式不对 浏览:86
百度云怎么编辑文件在哪里 浏览:304
起名app数据哪里来的 浏览:888
微信怎么去泡妞 浏览:52
百度广告html代码 浏览:244
qq浏览器转换完成后的文件在哪里 浏览:623
jsp中的session 浏览:621
压缩完了文件去哪里找 浏览:380
武装突袭3浩方联机版本 浏览:674
网络机顶盒移动网络 浏览:391

友情链接