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

Java-递归类中返回字符串的问题,java,string,recursion,Java,String,Recursion,我试图创建一个递归类,该类将字符串作为参数,并从以参数字符串开头的stringlist返回一行。如果找不到匹配项,则应返回“”。我似乎就快到了,但由于某种原因,一旦找到字符串并输入if语句,它就会返回字符串,然后跳转到代码中的另一个语句。换言之,由于某种原因,它不会退回它。任何帮助都会很有帮助 public String getLineStartingWith(String _string){ System.out.println("GETLINESTRING: " + _string

我试图创建一个递归类,该类将
字符串作为参数,并从以参数字符串开头的stringlist返回一行。如果找不到匹配项,则应返回“”。我似乎就快到了,但由于某种原因,一旦找到字符串并输入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);
}

你为什么这么做

//place parameter string into local string
String string = _string;
此代码具有完全相同的效果:

public String getLineStartingWith(String string){

    System.out.println("GETLINESTRING: " + string);
    // etc.
字符串是不可变的,所以不能对输入做任何不好的事情。此外,您甚至没有使用
string
(以后的所有代码都使用
\u string

我想你的问题是这件东西没有被退回:

restOfList.getLineStartingWith(_string);
尝试:


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

为什么要这样做

//place parameter string into local string
String string = _string;
此代码具有完全相同的效果:

public String getLineStartingWith(String string){

    System.out.println("GETLINESTRING: " + string);
    // etc.
字符串是不可变的,所以不能对输入做任何不好的事情。此外,您甚至没有使用
string
(以后的所有代码都使用
\u string

我想你的问题是这件东西没有被退回:

restOfList.getLineStartingWith(_string);
尝试:


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

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

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

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

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

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

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

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

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

所以我只是无缘无故地将第一部分留在那里。我的错。当你指的是基本情况,那意味着什么?@SergioRa-在递归中,基本情况就是你知道答案的情况。例如,在您的程序中,
if(currentString.startsWith(_string)){
部分是一个基本情况,因为您在那一点上停止递归调用函数。当您有答案时,您有一个基本情况,当没有答案时,您只需要一个基本情况。好吧,我想我开始理解了。类似这样的事情:if(restOfList.isEmpty){return”“;}where is empty是一个布尔值。@SergioRa-完全正确。请确保将其放在递归调用之前(
restOfList.getLineStartingWith(_string);
)为了防止无限循环。我修改了我的代码并在上面添加了它。但是我仍然有一些问题。好像它不想返回字符串,我最终得到了一个空指针异常。我的错。当你指的是基本情况时,这意味着什么?@SergioRa-在递归中,基本情况是我这是一种您知道答案的情况。例如,在您的程序中,
if(currentString.startsWith(_string)){
节是一个基本情况,因为您在该点停止递归调用函数。当您有答案时,您有一个基本情况,当没有答案时,您只需要一个基本情况。好的,我想我开始理解了。类似这样的内容:if(restOfList.isEmpty){return”“;}where is empty是一个布尔值。@SergioRa-完全正确。请确保将其放在递归调用之前(
restOfList.getLineStartingWith(_string);
)为了防止无限循环。我修改了我的代码并在上面添加了它。但是我仍然有一些问题。它好像不想返回字符串,我最终得到了一个空指针异常