我有一个家庭作业,我就是想不通。我必须编写一个静态方法 match(String x, String y),它返回一个布尔值来判断字符串 x 和字符串 y 是否匹配。匹配过程应允许“通配符”,例如将匹配任何单个字符的“@”字符和将匹配任何类型的 0 个或多个字符的“*”字符。我不允许使用任何循环,我必须使用递归。到目前为止,我写的就是这个……
public class CompareStrings {
public static boolean match(String x, String y) {
if (x.length() <= 1 && y.length() <= 1) {
if (x.equals("*") || y.equals("*")) {
return true;
}
if ((x.length() == 1 && y.length() == 1) && (x.equals("@") || y.equals("@"))) {
return true;
}
return x.equals(y);
}
String x1 = "";
String x2 = "";
String y1 = "";
String y2 = "";
if (x.length() == 0 && y.charAt(0) == '*') {
y2 = y.substring(1, y.length());
}
if (y.length() == 0 && x.charAt(0) == '*') {
x2 = x.substring(1, x.length());
}
if (x.length() > 1 && y.length() > 1) {
if (x.length() != y.length() && !x.contains("*") && !y.contains("*")) {
return false;
}
if (x.charAt(0) == '*') {
x1 = "*";
x2 = x.substring(1, x.length());
y1 = "*";
y2 = y.substring(y.length()-x2.length(), y.length());
}
else if (y.charAt(0) == '*') {
y1 = "*";
y2 = y.substring(1, y.length());
x1 = "*";
x2 = x.substring(x.length()-y2.length(), x.length());
}
else {
x1 = x.substring(0, 1);
x2 = x.substring(1, x.length());
y1 = y.substring(0, 1);
y2 = y.substring(1, y.length());
}
}
return match(x1, y1) && match(x2, y2);
}
public static void main(String[] args) {
System.out.println(match("hello", "hello.") + " 1 false"); // should return false
System.out.println(match("hello", "jello") + " 2 false"); // should return false
System.out.println(match("hello", "h@llo") + " 3 true"); // should return true
System.out.println(match("hello", "h@@@@") + " 4 true"); // should return true
System.out.println(match("hello", "h*") + " 5 true"); // should return true
System.out.println(match("hello", "*l*") + " 6 true"); // should return true
System.out.println(match("anyString", "*") + " 7 true"); // should return true
System.out.println(match("help", "h@@@@") + " 8 false"); // should return false
System.out.println(match("help", "h*") + " 9 true"); // should return true
System.out.println(match("help", "*l*") + " 10 true"); // should return true
System.out.println(match("help", "*l*p") + " 11 true"); // should return true
System.out.println(match("help", "h@llo") + " 12 false"); // should return false
System.out.println(match("", "*") + " 13 true"); // should return true
System.out.println(match("", "***") + " 14 true"); // should return true
System.out.println(match("", "@") + " 15 false"); // should return false
System.out.println(match("", "") + " 16 true"); // should return true
}
}
主要方法是作业给出的测试程序。我意识到我的代码有点乱——我有点乱——但我似乎可以让它大部分工作。唯一没有返回正确值的例子是数字 11。当它应该为真时,我得到了假。我认为发生这种情况的原因是因为字符串 y 以 ' ' 开头,我的方法所做的就是将 x 和 y 字符串拆分为最后 3 个字符,即使y 中的第一个 ' ' 应该代表 2人物。我怎样才能使这样的情况返回匹配项?