通配符(二)【java】
描述
Windows操作系统在查找文件时,文件名的匹配支持两种通配符:一种通配符是问号(英文“?”),它匹配任意的一个字符;一种通配符是星号(“*”),它匹配任意长度的任意字符。
例如,有模板串:“win*”,它能匹配“windows”“window”“win”“wind”等正文串,但是不能匹配“wifi”“will”“with”“nowindows”这些串。
再比如有模板串:“pro*em”,它能匹配“problem”“proem”“probem”等正文串,但是不能匹配“pro”“prem”“roblem”“problems”这些串。
又比如有模板串:“pro?em”,它能匹配“prolem”“probem”,但不能匹配“problem”“robem”“proem”“brobem”等。
又比如有模板串:“p?o*em”,它能匹配“problem”“poolem”“ploblem”“proem”,但不能匹配“polem”“poem”“plloblem”“problems”“noproblems”等。
现在给定一个模板串,它最多含有一个星号通配符和一个问号通配符(也可能只含其中一个,但至少含有一个),以及若干个正文串,对于可以匹配成功的正文串,应输出“Y”;否则输出“N”。
格式
输入格式
第一行是一个模板串,它仅包含一个星号或者问号通配符(也可能只含其中一个,但至少含有一个)。长度不超过20。串中只有大小写字母和数字以及通配符,没有空格等其它字符。
第二行是一个正整数n(1≤n≤100),表示随后有n个正文串。
从第三行起,每行一个正文串,一共有n行,每个正文串的长度都不超过100,串中只有大小写字母和数字,没有空格等其它字符。
输出格式
输出一个由“Y”和“N”组成的字符串,即匹配的结果。对于每一个正文串,匹配成功的结果是“Y”,不成功的结果是“N”。
样例
输入样例
go*od? 6 good gooood nogood goeods goods goeoodd
输出样例
NNNYYY
import java.util.Scanner;
import java.util.regex.Pattern;
public class wildcardMatcher {public static void main(String args[]){Scanner sc=new Scanner(System.in);String pattern= sc.nextLine();int T=sc.nextInt();sc.nextLine();StringBuffer result=new StringBuffer(T);while(T>0){String text=sc.nextLine(); if(match(pattern,text)){result.append("Y");}else{result.append("N");}T--;}System.out.println(result); }public static boolean match(String pattern, String text) {String regex = pattern.replace("?", ".") .replace("*", ".*");regex = "^" + regex + "$";Pattern r = Pattern.compile(regex);return r.matcher(text).matches();}
}
