首页 > 解决方案 > 使用递归在字符串中搜索指定的子字符串

问题描述

我正在做一个简短的项目,使用递归在字符串中搜索指定的子字符串。

我尝试过使用各种字符串和子字符串,以及使我的代码尽可能简单,但如果子字符串超过一个字符,它总是返回 false。(我有访问器和修改器,以及int i在此方法之前设置为 0)

public boolean find(String target) {
    if (i == target.length()) {
        return true;
    }
    System.out.println(sentence);
    if (sentence.length() < target.length()) {
        return false;
    }
    if (getSentence().toLowerCase().charAt(0) == target.toLowerCase().charAt(0)) {
        i++;
    } else {
        i = 0;
    }
    sentence = sentence.substring(1);
    return find(target);
}

测试器代码和输出:

public static void main(String[] args) {
    Sentence test = new Sentence("Lizard");
    System.out.println(test.find("z"));

    Sentence test2 = new Sentence("Seventeen");
    System.out.println(test2.find("teen"));     
}
Lizard 
izard 
zard 
true 

Seventeen 
eventeen 
venteen 
enteen 
nteen 
teen 
een 
false

标签: java

解决方案


您的方法仅target在第一个字符处进行测试,但您修改了sentence- 例如,您还需要target在递归时修改您的。就像是,

public boolean find(String target) {
    if (i == target.length()) {
        return true;
    }
    System.out.println(sentence);
    if (sentence.length() < target.length()) {
        return false;
    }
    if (sentence.toLowerCase().charAt(0) == target.toLowerCase().charAt(0)) {
        i++;
    } else {
        i = 0;
    }
    sentence = sentence.substring(1);
    return find(target.substring(1));
}

推荐阅读