我的代码应该分隔给定的字符串并将所选字母转换为 # 并将单词与所选字母分隔和连接。我的问题是我的代码中的方法之一(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/