从Java文本文件的子字符串递归

从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

所以对于这个程序,我们要使用递归。我们必须导入一个包含五个单词的文本文件,然后对于这些单词,我们必须找到所有可能的子字符串并将它们存储在数组列表中。所以,如果单词是cards:cards-card-card-ca-c-ard-ar-rds-rd-d-s

说明是,我们必须创建一个静态方法,该方法返回一个字符串类型的ArrayList,该ArrayList只接受一个参数,即字符串

因此,为了使某些东西能够递归,它必须调用自身以简化事情,并且必须对基本情况进行操作。所以现在我有:

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

另一个镜头:

  • 你有一个字符串输入的函数
  • 创建一个空的ArrayList
  • 将您的输入添加到ArrayList
  • 如果输入只有一个字符长,则返回ArrayList
  • 从输入中删除第一个字母
  • 使用#5中的字符串调用self。作为输入,保存返回的ArrayList
  • 从输入中删除最后一个字母
  • 使用#7中的字符串调用self。作为输入,保存返回的ArrayList
  • 迭代来自#6和#8的两个结果。
  • 检查该字符串是否已在#2的ArrayList中
  • 如果没有,请添加它
  • 从#2返回ArrayList
  • 利润

  • 但我仍然不知道,如何优化出9

    让我困惑的是“返回字符串”。该方法应该返回ArrayList,那么如果我要返回ArrayList,我应该如何返回字符串?学习与相同的课程?看起来像是一个类似的问题,尽管我的方向似乎不同。我们可以在这一个上使用循环(据我所知)。字符串的名称是???输入错误???是的,它应该读取名称,我的输入错误。如果该方法应该返回ArrayList,那么我可以只返回一个字符串吗?如果你想从该方法返回字符串,那么我猜你可以将a声明为静态字段,只处理a(不再需要立即列表B)