题目描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写。下同)
?:匹配1个字符
输入:
通配符表达式;
一组字符串。
输出:
返回匹配的结果,正确输出true,错误输出false
输入描述:
先输入一个带有通配符的字符串,再输入一个需要匹配的字符串
输出描述:
返回匹配的结果,正确输出true,错误输出false
输入例子:
te?t*.* txt12.xls
输出例子:
false
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while (scan.hasNext()) {
String str1 = scan.nextLine();
String str2 = scan.nextLine();
stringMatch(str1, str2);
}//endwhile
scan.close();
}
private static void stringMatch(String str1 , String str2){
//te?t*.*
//txt12.xls
boolean flag = true;
int length = str1.length();
String reg = "[\\d|a-z|A-Z]";
StringBuilder sb = new StringBuilder();
//* 匹配0个或以上 ?匹配一个
for(int i = 0 ; i < length ; i++){
if(str1.charAt(i) == '*'){
sb.append(reg + "*");
}else if(str1.charAt(i) == '?'){
sb.append(reg + "?");
}else{
sb.append(str1.charAt(i));
}
}
String reg_string = sb.toString();
if(str2.matches(reg_string)){
flag = true;
}else{
flag = false;
}
System.out.println(flag);
}
}
本文介绍了一种基于正则表达式的通配符匹配算法,该算法能够处理两种常见的通配符 * 和 ?,分别用于匹配任意数量的字符及单个字符。通过将通配符表达式转换为正则表达式并进行字符串匹配,实现了通配符的灵活应用。
882

被折叠的 条评论
为什么被折叠?



