如何返回String数组

时间:2014-02-07 14:51:35

标签: java arrays string

我的代码应该将给定的String分开,并将所选的字母转换为#,并将这些单词与所选字母分开并连接起来。我的问题是我的代码中的一个方法(allWordsWith),它不允许我返回一个String数组。 (p.s,运行这个的代码是无关紧要的,我不应该编辑那些代码)。

    import java.util.Arrays;
    import java.util.Scanner;

public class LipogramAnalyzer {
    private String line;
    public LipogramAnalyzer(String text){
         line = text;
    }
    public String mark (char letter){
        String replaceletters = line.replace(letter, '#');
        return replaceletters;
    }
    public String[] allWordsWith (char letter){
        String[] arr = line.split(" ");    
        for ( String ss : arr) {
            String ary[] = {ss};
                for(int i = 0; i < ary.length; i++){
                    int numindex = ss.indexOf(letter);
                    if (numindex != -1){
                        String result = ary[i];
                        return result;
                    }
                }
        }
    }
}

7 个答案:

答案 0 :(得分:2)

“它不允许我返回一个字符串数组”

当然可以。您正在尝试返回String

String result = ary[i];
return result;

即使返回类型是字符串数组:

public String[] allWordsWith (char letter){

您需要返回一个数组,因为allWordsWith表示您需要多个值。

但更大的问题是您正在将结果数组初始化为单个元素

String ary[] = {ss};

初始化后无法更改数组的长度。这意味着此循环中的ary.length

for(int i = 0; i < ary.length; i++){

总是等于一个。那不是你想要的。

此外,您正在搜索结果数组(ary)中的字符串,即使您刚创建它,也就是说 中没有任何内容< / em> - 也就是说,所有值都是null

如果您想要line中包含letter的所有字符串的列表,请尝试

public String[] allWordsWith (char letter){
    String[] asAllWordsInLine = line.split(" ");    
    java.util.ArrayList<String> alsAllWordsWithChar = new java.util.ArrayList<String>();
    for ( String ss : asAllWordsInLine) {
       if(ss.indexOf(letter) != -1)  {
          alsAllWordsWithChar.add(ss);
          continue;   //No need to check any more letters.
       }
    }
    return  alsAllWordsWithChar.toArray(new String[alsAllWordsWithChar.size()]);
}

我已将数组更改为列表,因为您无法知道其中有多少个字符串letter。列表可以更改大小,数组不能。当没有字符串匹配时,这将返回一个空数组which is preferred over null。 (more info

我还使变量名称更有意义,并在匹配一个字符后使用continue停止检查一个字,这会使当前的for循环迭代短路。)

最后,在分析所有字符串之前,该函数没有返回任何内容,这意味着在for循环完成之后。在原始代码中,return位于循环内,意味着只返回第一个字符串。

有用的测试功能:

public static final void main(String[] igno_red)  {
     testLine('b', "abc def ghi cba def ghi");
}
private static final void testLine(char c_letter, String s_line)  {  
   System.out.println("Line: \"" + s_line + "\"");  
   String[] asAllWordsWith = (new LipogramAnalyzer(s_line)).allWordsWith(c_letter);  
   System.out.println("Words with '" + c_letter + "': " + Arrays.toString(asAllWordsWith));  
}  

答案 1 :(得分:1)

返回ary而不是ary[i]

 for(int i = 0; i < ary.length; i++){
                        int numindex = ss.indexOf(letter);
                        if (numindex != -1){
                            String result = ary[i];
                         /*here*/   return ary;
                        }

答案 2 :(得分:0)

您可以返回一个数组。请尝试使用return ary代替return ary[i]

此外,您的函数必须在所有情况下返回一些内容。换句话说,你必须在for循环之后有一个return语句。

答案 3 :(得分:0)

您正在尝试返回String而不是String[](字符串数组) 更改代码:

if (numindex != -1) {
    String result = ary[i];
    return result;
}

要:

if (numindex != -1) {
    return new String[]{ary[i]};
}
// afrer first for loop
return arr;

答案 4 :(得分:0)

public String[] allWordsWith (char letter){
    String[] arr = line.split(" ");    
    for ( String ss : arr) {
        String ary[] = {ss};
            for(int i = 0; i < ary.length; i++){
                int numindex = ss.indexOf(letter);
                if (numindex != -1){
                    String result = ary[i];
                    // or here return ary;
                }
            }
    }
    return ary;
}

返回数组

答案 5 :(得分:0)

如果你想一次返回一个完整的String-Array,我修改了你的函数(未测试):

public String[] allWordsWith (char letter){
    String[] arr = line.split(" ");
    String[] result = new String[ary.length];
    for ( String ss : arr) {
        String ary[] = {ss};
            for(int i = 0; i < ary.length; i++){
                int numindex = ss.indexOf(letter);
                if (numindex != -1){
                    result[i] = ary[i];
                }
            }
    }
    return result;
}

答案 6 :(得分:0)

如前所述,您将返回String而不是String []。另请注意,您的代码只返回一个“单词”。我修改了您的代码以添加包含您的角色的每个单词并将其添加到List。在循环结束时,List被转换为String []。

public String[] allWordsWith(char letter)
{
    String[] arr = line.split(" ");
    List<String> result = new ArrayList<>();
    for (String ss : arr) {
        int numindex = ss.indexOf(letter);
        if (numindex != -1) {
            result.add(ss);
        }
    }
    return result.toArray(new String[result.size()]);
}