java 通配符匹配字符串

唯一id加下划线加一串随机数加点tmp
如:
110_1565121651.tmp

主要匹配110 _ .tmp 这三者,那串随机数不需要匹配

原以为用 * 代替那串随机数就可以匹配到(110_*.tmp),结果不行

或者直接给一个 查找文件符合命名条件的方法,命名条件是110_xxxxxxx.tmp

第一步实现含?而不含*的 字符串匹配,如对dd?的匹配

第二步,实现含有* 的字符串的匹配,如abc* dd?,主要思路是用* split 字符串,分为两个有效的串,abc, dd?

然后使用步骤一种的方法来查看匹配到的index.

/**

* 找出含?的字符串

* @return

*/

public int checkSubPattern(String src,int begin,String pat){

boolean isFound=true;

if(src.length()-begin < pat.length()){return -1;}

for(int i=begin;i<src.length()-pat.length()+1;i++){

for(int j=0;j<pat.length();j++){

if(pat.charAt(j)!='?' && src.charAt(i+j)!=pat.charAt(j)){

isFound =false;

break;

}

isFound = true;

}

if(isFound){return i;}

}

return -1;

}

public boolean checkStar(String src,String pat){

String[] sub_p = pat.split("\\*");

int begin =0;

for(int i=0;i< sub_p.length;i++){

begin = checkSubPattern(src,begin,sub_p[i]);

System.out.println(begin);

if(begin==-1){return false;}

if(i==0 && pat.charAt(i)!='*' &&begin!=0){return false;}

if((i==sub_p.length-1) && pat.charAt(i)!='*'
&&begin!=(src.length()-
sub_p[i].length())){return false;}

}

return true;

}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-12
我记得在String类中有一个matches(reg)方法,可以加正则表达式判定是否符合要求,
String string ="110_1565121651.tmp";
boolean flag=string.matches("110_[0-9]+\\.tmp");
System.out.println("flag="+flag);
试下是不是这样,我了是初学者,如不对,请见谅。本回答被提问者采纳
第2个回答  2014-04-12
朋友:或许下面的方法可以满足你的要求。
祝你好运。
public static void main(String[] args) {
String fileName = "110_xxxxxxx.tmp";
if(fileName.startsWith("110_") && fileName.endsWith(".tmp"))
{
System.out.println(fileName + " is true;");
}
else
{
System.out.println(fileName + " is false;");
}
}