我正在尝试创建一个递归类,它以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);
}
答案 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);
}
}
很抱歉,如果这不是您想要的。