java - 如何返回字符串数组

标签 java arrays string

我的代码应该分隔给定的字符串并将所选字母转换为 # 并将单词与所选字母分隔和连接。我的问题是我的代码中的方法之一(allWordsWith),它不允许我返回字符串数组。 (另外,运行这个代码的代码是无关紧要的,我不应该编辑这些代码)。

    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;
                    }
                }
        }
    }
}

最佳答案

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

当然会的。您正在尝试返回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++){

始终等于 1。这不是你想要的。

此外,您正在搜索 result 数组 (ary) 中的字符串,即使您刚刚创建了它,这意味着它没有任何内容其中——也就是说,所有值都是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));  
}  

关于java - 如何返回字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21630732/

相关文章:

java - 无法理解关于多维数组的这个例子

java - 是否可以使用 Spring Data 和 MongoDB 的索引功能从子类中索引父类(super class)的公共(public)字段?

java - LibGdx font.setColor(Color.WHITE) 不起作用

java - 接受所有输入后如何跳出 while 循环?

在对象数组上使用函数变量时的 Javascript 'undefined'

arrays - 将带有索引的元素添加到 PostgreSQL 中的数组

java - 用包含原始子字符串的条件子字符串替换多次出现的子字符串

javascript - 如何在javascript中组合数组

c++ - 从 char 转换为 string 时丢失编码

javascript - 如何计算特定字符在字符串中出现的次数