当前位置: 代码迷 >> J2SE >> 一道匹配算法题,求解,该如何处理
  详细解决方案

一道匹配算法题,求解,该如何处理

热度:114   发布时间:2016-04-24 02:19:35.0
一道匹配算法题,求解
类似win下搜索文件的匹配方式
?:代表0个或1个任意字符
*:代表0个或多个任意字符

例子:
abcdefg

?ab* ->true
ab* ->true
ab*c* ->true
ab*d??????*****g->true
abc ->false


------解决方案--------------------
- -这必然是正则
------解决方案--------------------
探讨

引用:

- -这必然是正则

晕了。我一直以为正则就那么一种。受教了。

这个如果自己用代码实现,应该怎么写

------解决方案--------------------
Java code
public class StringCompare {    static int cmp;    static void strcmp(String str1, int sub1, String str2, int sub2){        if(sub1 >= str1.length() || sub2 >= str2.length()){            if(sub1 == str1.length() && sub2 == str2.length()){                ++cmp;                return;            }            else if(sub1 == str1.length()){                int i;                for(i = sub2; i < str2.length(); ++i){                    if(str2.charAt(i) != '?' && str2.charAt(i) != '*'){                                                return;                    }                }                if(i == str2.length())                    ++cmp;            }                        return;                                    }        if(str2.charAt(sub2) == '?'){            strcmp(str1, sub1, str2, ++sub2);            strcmp(str1, ++sub1, str2, sub2);        }        if(sub2 < str2.length() && str2.charAt(sub2) == '*'){            for(int i = 0; i < str1.length(); ++i){                                strcmp(str1, sub1+i, str2, sub2+1);                            }                    }        if(sub1 < str1.length() && sub2 < str2.length()){            if(str1.charAt(sub1) != str2.charAt(sub2)){                return;                }            else                strcmp(str1, sub1+1, str2, sub2+1);            }                    }    public static void main(String[] args){        String str1 = new String("abcdefg");        String str2 = new String("ab*d??????*****g");        strcmp(str1, 0, str2, 0);            System.out.println(cmp >= 1);    }}
------解决方案--------------------
有必要把正则的逻辑再实现一次吗?可以找下jdk中java.util.regx.*的源码看下
  相关解决方案