1. 有下列三项值(这些值可以存在数组或类集里):
us/ibm/department/user
us/ibm/department/*.html
us/ibm/department/*
2. 另有下列一组值或者更多(这些值可以存在数组或类集里)
us/ibm/department/user
us/ibm/department/groups
us/ibm/department/checkPWD.html
us/ibm/department/checkPWD.jsp
us/ibm/department/customer/info
cn/kingdie/dff要求写出这样的方法:  判断 上面第二组值是否和第一组值匹配,匹配返回true,否则返回false。规则可以看下面:
us/ibm/department/user (满足us/ibm/department/user,故返回true)
us/ibm/department/groups  (满足us/ibm/department/*,返回true)
us/ibm/department/checkPWD.html (满足us/ibm/department/*.html,返回true)
us/ibm/department/checkPWD.jsp (不满足上面任何一项...因为.jsp中的小数点,返回false)
us/ibm/department/customer/info (满足us/ibm/department/*,返回true)
cn/kingdie/dff(不满足上面任何一项,返回false)
请问该怎么写代码来比较较好?

解决方案 »

  1.   

    把"us/ibm/department/*.html"这样的字符串
    替换成正则表达式@"us/ibm/department/\w+\.html"
    然后用正则表达式匹配
      

  2.   

    比如下面第一行满足第二行的规则:
    String str1 = us/ibm/department/checkPWD.html
    String str2 = us/ibm/department/*.html该怎么写?
      

  3.   

    对于有带通配符的
    us/ibm/department/*.html
    us/ibm/department/*
    用正则表达式 来表达
    遍历两个集合,进行判断就行了
      

  4.   

    这个想起来好想,做起来不太易。因为
    us/ibm/department/user
    us/ibm/department/*.html
    us/ibm/department/*
    有包含关系。还有“us/ibm/department/checkPWD.jsp”属于最后一种,但要返回false,这点要考虑。我想了个:public static boolean compare(String str){
    boolean b1=str.matches("us/ibm/department/user");
    boolean b2=str.matches("us/ibm/department/.*?\\.html");
    boolean b3=str.matches("us/ibm/department/.*?");
    boolean b4=str.matches("us/ibm/department/.*?\\..*?");
    if(b4&&!b2)return false;//验证us/ibm/department/checkPWD.jsp类型
    if(b3&&!b2&&!b1)return true;//验证us/ibm/department/*类型
    if(b3&&b2&&!b1)return true;//验证us/ibm/department/*.html类型
    if(b3&&!b2&&b1)return true;//验证us/ibm/department/类型
    return false;
    }比较繁琐,求各位简化。如果记B1是满足“us/ibm/department/user”的集合;B2是满足“us/ibm/department/*.html”的集合;B3是满足“us/ibm/department/*”的集合。那么个集合关系为:B1、B2是B3的子集,且B1、B2无交集。
      

  5.   


    /*
    1. 有下列三项值(这些值可以存在数组或类集里):
    us/ibm/department/user
    us/ibm/department/*.html
    us/ibm/department/*
    2. 另有下列一组值或者更多(这些值可以存在数组或类集里)
    us/ibm/department/user
    us/ibm/department/groups
    us/ibm/department/checkPWD.html
    us/ibm/department/checkPWD.jsp
    us/ibm/department/customer/info
    cn/kingdie/dff要求写出这样的方法: 判断 上面第二组值是否和第一组值匹配,匹配返回true,否则返回false。规则可以看下面:
    us/ibm/department/user (满足us/ibm/department/user,故返回true)
    us/ibm/department/groups (满足us/ibm/department/*,返回true)
    us/ibm/department/checkPWD.html (满足us/ibm/department/*.html,返回true)
    us/ibm/department/checkPWD.jsp (不满足上面任何一项...因为.jsp中的小数点,返回false)
    us/ibm/department/customer/info (满足us/ibm/department/*,返回true)
    cn/kingdie/dff(不满足上面任何一项,返回false)
    请问该怎么写代码来比较较好?*/import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class Test{
    public static void main(String[] args){
    //先将第一组数据转换成对应的正则表达式,即将所有的*用\\w*,将.替换为\\.,然后将
    //第二组数据代入测试是否满足对应的这些正则表达式.
    String[] regexs = {
    "us/ibm/department/user",
    "us/ibm/department/*.html",
    "us/ibm/department/*"
    };
    String[] contents = {
    "us/ibm/department/user",
    "us/ibm/department/groups",
    "us/ibm/department/checkPWD.html",
    "us/ibm/department/checkPWD.jsp",
    "us/ibm/department/customer/info",
    "cn/kingdie/dff"
    }; //将regexs转换成对应的正则表达式形式字符串 transform(regexs); //debug
    //for(String regex : regexs){
        // System.out.println(regex);
    //} //执行对应的测试并输出结果. process(contents,regexs); }

    private static void transform(String[] regexs){
    //将所有的*用\\w*,将.替换为\\.

    if(regexs == null || regexs.length == 0){
    throw new IllegalArgumentException("Argument is illegal");
    } int i = 0; for(String arg : regexs){
    regexs[i ++] = arg.replaceAll("[*]","(\\\\w|/)*").replaceAll("[.]","\\\\.");
    }
    } private static void process(String[] contents,String[] regexs){
    if(regexs == null || regexs.length == 0 || contents == null || contents.length == 0){
    throw new IllegalArgumentException("Argument is illegal");
    } outer :for(String content : contents){
    for(String regex : regexs){
    if(content.matches(regex)){
    System.out.println(content + " is valid!");
    continue outer;
    }
    }
    System.out.println(content + " is not valid!");
    }
    }}