为什么递归不起作用?

时间:2016-05-24 13:56:43

标签: c#

我需要删除字符串中的子字符串。我需要删除从特定字符开始直到另一个字符的字符串。这是我的代码:

    [Test]
    public static void TestDeleteSign()
    {
        var s = "РасчНал[]{@ТипНП}/РасчНалГруп[]{@СубРФ}/@ДоляНалБаз";
        var result = DeleteSignature(s);
        var acceptResult = "РасчНал/РасчНалГруп/@ДоляНалБаз";
        Assert.AreEqual(acceptResult, result);
    }
    public static string DeleteSignature(string s)
    {
        if (s.Contains("[]{"))
        {
            var firstEntry = s.IndexOf("[]{");
            var closeEntry = s.IndexOf('}');
            s = s.Remove(firstEntry, closeEntry - firstEntry + 1);
            DeleteSignature(s);
        }
        return s;
    }

结果是:

Expected: "РасчНал/РасчНалГруп/@ДоляНалБаз"
But was: "РасчНал/РасчНалГруп[]{@СубРФ}/@ДоляНалБаз"

1 个答案:

答案 0 :(得分:4)

您的函数返回一个字符串。在函数的第一次迭代之后,第二次调用函数。无论在那里发生了什么,您的代码将只返回一个段落,因为您对DeleteSignature(s)的递归执行不执行任何操作。您需要返回递归执行的输出,如:

public static string DeleteSignature(string s)
{
    if (s.Contains("[]{"))
    {
        var firstEntry = s.IndexOf("[]{");
        var closeEntry = s.IndexOf('}');
        s = s.Remove(firstEntry, closeEntry - firstEntry + 1);
        return DeleteSignature(s);
    }
    return s;
}
相关问题