在java中返回一组字符串

时间:2014-02-20 01:33:40

标签: java string recursion set

首先,我想因为我的英语不好而道歉。现在,如何使用递归返回一组字符串?我知道逻辑但我无法弄清楚如何在从字符串中添加所有这些单词后返回该集合。

使用像这样的字符串的例子

String s = "how do i return this?";

将此字符串传递给方法后,我需要创建一个集合,然后使用递归来删除字符串(将添加到集合中,并返回集合)。

当返回集合时,我应该将集合输出到文件。

我的逻辑是:

//because every word in the string ends with a space
//So I need to get the index of that space
int n = s.indexOf(' ');
//add each word to the set (each word start at index 0 to the index of the space ' '.
set.add(s.substring(0, n));
//recursive case ( keep doing this until the length of string is 0.)
methodName(n+1, s.length());

我知道我可以使用类变量(set)执行此操作,但在这种情况下我需要使用local并且它似乎不起作用。

4 个答案:

答案 0 :(得分:0)

要从方法返回任何内容,请将方法定义为:

<return type> methodName(parameters) {
    // code
    return retval;
}

然后你可以这样称呼它:

<return type> retval = methodName(parameters);

因此,定义您的方法以返回Set<String>,并将最后一行替换为:

set.addAll(methodName(n+1, s.length()));

最后,添加一个return语句:

return set;

你已经完成了。

答案 1 :(得分:0)

将set添加到方法的参数:

methodName(n+1, s.length(), set);

答案 2 :(得分:0)

你走在正确的轨道上。

我的建议

  • 使用LinkedHashSet作为您的Set实现,因此您将按照插入顺序获取令牌
  • 您的递归方法必须传递Set as参数(因此它可以累积您的标记)
  • 不要忘记添加一种方法来阻止递归方法中的递归(例如,如果你的索引在字符串结尾之后)

我解决这个问题的方法有一个像

这样的方法
private static void recursiveMethod(String x, Set<String> s)

其中x是前一个字符串的子字符串。

答案 3 :(得分:0)

你需要一个基本案例来知道你完成递归的位置,实际上使用indexOf是一个很好的选择,如果它是-1那么你没有任何事情可做。

示例:

import java.util.HashSet;
import java.util.Set;

public class RecursionExample {

    public static void main(String[] args) {
       Set<String> set = new HashSet<>();
       methodName("how do i return this?", set);
       System.out.println(set);
   }

   static void methodName(String s, Set<String> set) {
    // because every word in the string ends with a space
    // So I need to get the index of that space
    int n = s.indexOf(' ');
    // base case
    if (n < 0) {
        set.add(s);
        return;
    }
    // add each word to the set (each word start at index 0 to the index of
    // the space ' '.
    set.add(s.substring(0, n));
    // recursive case ( keep doing this until the length of string is 0.)
    methodName(s.substring(n + 1, s.length()), set);
}
}

输出:

[how, return, do, this?, i]