0

これは私がこれまでに行った再帰ですが、正しくないようです。これは主に関心がないためです。ヘルプやヒントをいただければ幸いです。

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
    }
}
4

2 に答える 2

1

再帰についてはわかりませんが、次のような単純なことをしてみませんか

public static boolean match(String x, String y) {
    return x.matches(y.replace("@", ".").replace("*", ".*"));
}

正規表現ランドでは、

  • .任意の文字に一致
  • X*0回以上一致X
  • したがって、.*空の文字列を含む任意の文字列に一致します

あなたの例から判断する@と、単一の文字*に一致し、任意の文字列に一致する必要があります。したがって、すべて@の syをに置き換え、すべてのsを.に置き換え、結果の文字列を正規表現として使用して、一致するかどうかを確認します。*.*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", "*"));
間違い
間違い
真実
真実
真実
真実
真実
于 2013-03-30T17:34:08.753 に答える
1

Recursionを使用する場合は、関数をそれ自体の内部で使用する必要があることを覚えておく必要があります。見て、例:

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

私の関数は myMethod で、それを内部で使用しています。しかし、あなたはそれをしていないので、\ recursionを使用していません。

于 2013-03-30T17:29:14.827 に答える