2011-10-27 51 views
1

我想做一个递归类,它需要一个string作为参数,并从字符串列表返回一个以参数字符串开头的行。如果找不到匹配,它应该返回“”。我似乎几乎在那里,但由于某种原因,一旦找到字符串并输入if语句,它会返回字符串,但会跳转到代码中的其他语句。换句话说,由于某种原因,它不会返回它。任何帮助真的会有所帮助。Java-在递归类中返回字符串的问题

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); 
} 

回答

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是空的另一基本情况。

+0

因此,我刚刚离开那里没有理由的第一部分。我的错。当你的意思是基本情况下,这是什么意思? – Splitusa

+0

@SergioRa - 在递归中,基本情况就是你知道答案的情况。例如,在你的程序中,'if(currentString.startsWith(_string)){'部分是一个基本情况,因为你在该点递归调用函数。当你有答案时,你有一个基本的例子,当你没有答案时,你只需要一个答案。 –

+0

好吧,我开始明白,我想。所以像这样:if(restOfList.isEmpty){return“”; }空白是一个布尔值。 – Splitusa

0

对不起,如果这可能不会回答你的问题。

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

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

对不起,如果这不是你想要的。