使用递归将一个字符串的部分替换为另一个字符串(Java)

时间:2011-03-31 00:11:05

标签: java recursion

我需要编写一个方法,用字符串生成器替换字符串启动器中的每个“F”(使用递归)。这是我的镜头,但它似乎没有正常工作:

public String nextGeneration(String initiator, String generator)
{
    String result2 = "";
    if (initiator=="F")
    {
        result2 = generator;
    }
    else
    {
        if (initiator.substring(0,0)=="F")
        {
            result2 = generator + nextGeneration(initiator.substring(1,initiator.length()), generator);
        }
        else if (initiator.substring(0,0)=="+")
        {
            result2 = "+" + nextGeneration(initiator.substring(1,initiator.length()), generator);
        }
        else if (initiator.substring(0,0)=="-")
        {
            result2 = "-" + nextGeneration(initiator.substring(1,initiator.length()), generator);
        }
    }
    return result2;
}

有什么建议吗?

3 个答案:

答案 0 :(得分:2)

请勿使用==来比较字符串,请使用string1.equals(string2)

string1 == string2测试两个引用是否引用内存中的同一对象,而不是它们的字符串内容值是否相等。

答案 1 :(得分:1)

你的问题是缺少信息,因为你有其他你没有解释的角色。

我正在使用您的代码来查看它是如何工作的,我意识到当我添加initiator.length() == 0位时代码存在问题。

我要离开我的尝试,因为它可能会帮助你看到你做的不同,但这是不正确的。

在一个递归程序中,如果你用铅笔/纸来看看会发生什么,它会有所帮助,但是,基本上,你的第一个if语句是有缺陷的,因为它正在寻找迭代器为{{1这不是你想要的,但是,如果它不是这三个字符中的一个,它将返回,尽早退出,这可能是你不想要的。

所以,用一个例子来看看它,记下你期望会发生什么,然后通过你的逻辑看看会发生什么,然后用结果和你对错误的分析来更新你的问题。

但是,在手动完成后,请使用调试器来查看是否可以确定如何修复程序。

"F"

答案 2 :(得分:0)

public static String nextGeneration(String initiator, String generator){
    StringBuffer result = new StringBuffer();   
    if(initiator.length() > 0){
        char letter = initiator.charAt(0);
        if(letter == 'F')
            result.append(generator);
        else
            result.append(letter);
        result.append(nextGeneration(initiator.substring(1),generator));
    }
    return result.toString();
}