Java-在递归类中返回字符串的问题

时间:2011-10-27 03:15:06

标签: java string recursion

我正在尝试创建一个递归类,它以string作为参数,并从以参数字符串开头的字符串列表中返回一行。如果找不到匹配,则应返回“”。我似乎几乎在那里,但由于某种原因,一旦找到字符串并进入if语句,它返回字符串,但然后跳转到代码中的另一个语句。换句话说,由于某种原因,它没有归还它。任何帮助都会有所帮助。

public String getLineStartingWith(String _string){

    System.out.println("GETLINESTRING: " + _string);

    //place parameter string into local string
    String string = _string;

    //return the line from the stringlist if it starts with the 
    //parameter string

    if(currentString.startsWith(_string)){
        System.out.println("CURRENT STRING: " + currentString);
        return currentString;
    } 

    restOfList.getLineStartingWith(_string);
    return "";

    //return restOfList.getLineStartingWith(_string);
}

修改

我对我的代码做了一些更改。但由于某种原因,在它返回当前字符串后,它每次都返回restOfList.getLineStartingWith(string)。我认为它不会检测它是否为空

public String getLineStartingWith(String string){

    System.out.println("GETLINESTRING: " + string);

    //return the line from the stringlist if it starts with the 
    //parameter string

    if(currentString.startsWith(string)){
       System.out.println("CURRENT STRING: " + currentString);
       return currentString;
    } 

    if(restOfList.isEmpty){
        return "";
    }

    return restOfList.getLineStartingWith(string);
}

2 个答案:

答案 0 :(得分:1)

你为什么这样做?

//place parameter string into local string
String string = _string;

此代码具有完全相同的效果:

public String getLineStartingWith(String string){

    System.out.println("GETLINESTRING: " + string);
    // etc.

字符串是不可变的,因此您不能对输入做任何不好的事情。此外,您甚至没有使用string(所有后期代码都使用_string)。

我认为你的问题是没有退回:

restOfList.getLineStartingWith(_string);

尝试:

return restOfList.getLineStartingWith(_string);

您可能还需要另一个处理restOfList为空的基本案例。

答案 1 :(得分:0)

如果这可能无法解答您的问题,我很抱歉。

在我看来,您只想显示以该特定字符串开头的所有行。如何在String列表中的每个项目上进行简单的循环?这样的事情怎么样:

for (String line : allLines) {
    if (line.startsWith(string)){
        System.out.println(line);
    }
}

很抱歉,如果这不是您想要的。