我怎样才能得到最终结果?

时间:2013-03-30 17:22:50

标签: java

这是我到目前为止所做的递归,但它似乎不正确,这主要是出于兴趣。任何帮助或提示将不胜感激。

public class CompareStrings { 
    public static boolean match(String x, String y) {
        //turn each string into a char[], sort that array,
        //then compare the two Simple 
        char[] first  = x.toCharArray();
        char[] second = y.toCharArray();
        java.util.Arrays.sort(first);
        java.util.Arrays.sort(second);
        String sorted_str1 = new String(x);
        String sorted_str2 = new String(y);

        if(sorted_str1.equals(sorted_str2)){
            return true;
        }
        else{
            return false;
        }

    } 

    public static void main(String args[]) { 
        System.out.println(match("hello", "hello.")); // should return false
        System.out.println(match("hello", "jello")); // should return false
        System.out.println(match("hello", "h@llo")); // should return true
        System.out.println(match("hello", "h@@@@")); // should return true
        System.out.println(match("hello", "h*")); // should return true
        System.out.println(match("hello", "*l*")); // should return true
        System.out.println(match("anyString", "*")); // should return true
    }
}

2 个答案:

答案 0 :(得分:1)

你必须记住,如果你想使用 Recursion ,你必须在自己内部使用你的函数。看看和例子:

void myMethod( int counter)
{
if(counter == 0)
else
{
System.out.println("hello" + counter);
myMethod(--counter);
System.out.println(""+counter);
}
} 

我的功能是myMethod,我在其中使用它。但是你没有这样做,所以你没有使用递归

答案 1 :(得分:1)

我不知道递归,但为什么不做一些像

这样简单的事情
public static boolean match(String x, String y) {
    return x.matches(y.replace("@", ".").replace("*", ".*"));
}

在regex-land中,

  • .匹配任何字符
  • X*匹配X 0次或以上
  • 因此,.*匹配任何字符串,包括空字符串

根据您的示例判断,您希望@匹配单个字符,*匹配任何字符串。因此,我们将@中的所有y替换为.,并将所有*替换为.*,并将结果字符串用作正则表达式,然后检查如果x与之匹配。


System.out.println(match("hello", "hello."));
System.out.println(match("hello", "jello"));
System.out.println(match("hello", "h@llo"));
System.out.println(match("hello", "h@@@@"));
System.out.println(match("hello", "h*"));
System.out.println(match("hello", "*l*"));
System.out.println(match("anyString", "*"));
false
false
true
true
true
true
true