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)
请问该怎么写代码来比较较好?
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)
请问该怎么写代码来比较较好?
替换成正则表达式@"us/ibm/department/\w+\.html"
然后用正则表达式匹配
String str1 = us/ibm/department/checkPWD.html
String str2 = us/ibm/department/*.html该怎么写?
us/ibm/department/*.html
us/ibm/department/*
用正则表达式 来表达
遍历两个集合,进行判断就行了
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无交集。
/*
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!");
}
}}