从Java文本文件的子字符串递归
所以对于这个程序,我们要使用递归。我们必须导入一个包含五个单词的文本文件,然后对于这些单词,我们必须找到所有可能的子字符串并将它们存储在数组列表中。所以,如果单词是cards:cards-card-card-ca-c-ard-ar-rds-rd-d-s 说明是,我们必须创建一个静态方法,该方法返回一个字符串类型的ArrayList,该ArrayList只接受一个参数,即字符串 因此,为了使某些东西能够递归,它必须调用自身以简化事情,并且必须对基本情况进行操作。所以现在我有:从Java文本文件的子字符串递归,java,string,recursion,arraylist,substring,Java,String,Recursion,Arraylist,Substring,所以对于这个程序,我们要使用递归。我们必须导入一个包含五个单词的文本文件,然后对于这些单词,我们必须找到所有可能的子字符串并将它们存储在数组列表中。所以,如果单词是cards:cards-card-card-ca-c-ard-ar-rds-rd-d-s 说明是,我们必须创建一个静态方法,该方法返回一个字符串类型的ArrayList,该ArrayList只接受一个参数,即字符串 因此,为了使某些东西能够递归,它必须调用自身以简化事情,并且必须对基本情况进行操作。所以现在我有: public sta
public static ArrayList<String> SubstringCalculator (String theName)
{
/* Do I call create a new ArrayList here? Wouldn't that mean
* that every time I call this method an entire new ArrayList
* is created? I only want one ArrayList.
*/
ArrayList<String> result = new ArrayList<String>();
System.out.print (theString);
result.add(theString) // Add the string to the ArrayList
if (theString.length > 1) {
// Make a new string with 1 char less than the original.
String newString = theString.substring(0, theString.length() - 1);
// Call the method again with the new string.
SubstringCalculator (newString);
return result;
}
return theString; // Return the string if it is of length 1.
}
publicstaticarraylistsubstringcalculator(字符串名称)
{
/*我要在这里创建一个新的ArrayList吗?这不是意味着
*每次我调用这个方法时,都是一个全新的ArrayList
*是否已创建?我只需要一个ArrayList。
*/
ArrayList结果=新建ArrayList();
System.out.print(字符串);
result.add(theString)//将字符串添加到ArrayList
如果(字符串长度>1){
//创建一个比原始字符串少1个字符的新字符串。
String newString=theString.substring(0,theString.length()-1);
//使用新字符串再次调用该方法。
子字符串计算器(newString);
返回结果;
}
返回字符串;//如果字符串长度为1,则返回该字符串。
}
我知道这是不对的,但我不知道该怎么做。有什么帮助吗?这是一张草图。如果字符串为空,则返回包含空字符串的列表。如果没有,则有两个字符串:第一个(字符串中的第一个字符)和字符串的其余部分。找到字符串其余部分的所有子字符串,然后针对每个子字符串,将第一个字符放在所有可能的位置。如果字符串的长度为1,则应返回包含字符串本身的列表。如果字符串的长度大于1:
- 初始化新列表a
- 从字符串中取出第一个或最后一个字符并调用新子字符串上的方法,这将返回列表B(这是递归的)
- 将B的所有元素添加到A
- 遍历B将第一个或最后一个字符附加到B中每个字符串的第一个或最后一个位置,然后添加到A
- 返回A
但我仍然不知道,如何优化出9 让我困惑的是“返回字符串”。该方法应该返回ArrayList,那么如果我要返回ArrayList,我应该如何返回字符串?学习与相同的课程?看起来像是一个类似的问题,尽管我的方向似乎不同。我们可以在这一个上使用循环(据我所知)。字符串的名称是???输入错误???是的,它应该读取名称,我的输入错误。如果该方法应该返回ArrayList,那么我可以只返回一个字符串吗?如果你想从该方法返回字符串,那么我猜你可以将a声明为静态字段,只处理a(不再需要立即列表B)