java 搜索算法

bttbmeg0  于 2023-03-28  发布在  Java
关注(0)|答案(3)|浏览(131)

我写了这段代码,但我不知道为什么不工作。

static boolean findeText(String text1, String text2) {

    char c1[] = text1.toCharArray();
    char c2[] = text2.toCharArray();
    boolean b = false;
    for (int i = 0; i <= c1.length - c2.length; i++) {
        for (int j = 0, h = i; j <= c2.length; j++, h++) {
            if (i == c2.length) {
                return true;
            }
            if (c1[h] != c2[j]) {
                b = false;
                break;
            }
        }
    }
    return b;
}

我想在文本1中找到文本2,然后返回true或false。

a11xaf1n

a11xaf1n1#

如果你想检查某个字符串是否包含其他字符串,只需使用contains()方法。
对你来说

return text1.contains(text2);

另外,你应该始终以防御的方式编写代码。这意味着你应该始终确保不会有NullPointerException等。因此,在您的特定情况下,如果有人传递null text1或null text2,您的程序将崩溃。

6jygbczu

6jygbczu2#

上面你有NPE在排队
if(c1[h]!= c2[j])
我已经稍微修改了你的代码,以获得输出的要求.

static boolean findeText(String text1, String text2) {
        if ((text1== null) ||(text2==null) || (text1.isEmpty()) || (text2.isEmpty())) {
            System.out.println("Invalid input");
            return false;
        }
        char c1[] = text1.toCharArray();
        char c2[] = text2.toCharArray();
        
        for (int i = 0; i <= c1.length - c2.length; i++) {
            int count = 0;
            for (int j = 0; j < c2.length; j++) {
                if (c1[i + j] == c2[j]) {
                    count = count + 1;
                }
                if (count == c2.length) {
                    return true;
                }
            }
        }
        return false;
    }
fwzugrvs

fwzugrvs3#

所提供的代码有一些缺陷,使其无法在第一个文本中正确定位第二个文本。以下是一些改进建议:

static boolean findText(String text1, String text2) {

    char c1[] = text1.toCharArray();
    char c2[] = text2.toCharArray();

    for (int i = 0; i <= c1.length - c2.length; i++) {
        boolean b = true;
        for (int j = 0, h = i; j < c2.length; j++, h++) {
            if (c1[h] != c2[j]) {
                b = false;
                break;
            }
        }
        if (b) {
            return true;
        }
    }
    return false;
}

相关问题