我正在尝试使用以下参数编写翻译方法。但是,每次运行该方法时,它都会跳过第一个 if 语句并直接进入第二个 for 循环。
/** 根据wordList中的数据翻译单词,然后匹配大小写。 参数 wordList 包含翻译的映射。数据是 组织在包含长度为 2 的字符串数组的 ArrayList 中。第一个 单元格(索引 0)包含原始语言中的单词,称为键, 第二个单元格(索引 1)包含翻译。 假设wordList中的项目按升序排序 根据第一个单元格中的键。 @参数词 要翻译的词。 @参数wordList 包含翻译映射的 ArrayList。 @return wordList 中的映射,大小写与原始大小写相同。如果不 在wordList中找到match,则返回与word长度相同的Config.LINE_CHAR字符串。 */
public static String translate(String word, ArrayList<String[]> wordList) {
String newWord = "";
int i = 0;
for (i = 0; i < wordList.size(); i++) {
word = matchCase(wordList.get(i)[0], word); //make cases match
if (word.equals(wordList.get(i)[0])) { //check each index at 0
newWord = wordList.get(i)[1]; //update newWord to skip second for loop
return wordList.get(i)[1];
}
}
if (newWord == "") {
for (i = 0; i < word.length(); i++) {
newWord += Config.LINE_CHAR;
}
}
return newWord;
}
对于我正在运行的文件,每个单词都应该有一个翻译后的单词,因此不应打印 Config.LINE_CHAR。但这是唯一打印的内容。我该如何解决这个问题。
最佳答案
您正在将 newWord
初始化为值 ""
。 newWord
唯一可能发生更改的情况是在第一个循环中,紧接着是 return
语句,退出您的方法。到达 if 语句的唯一方法是如果您在第一个循环期间没有返回,因此如果它到达该 if 语句,则 newWord
自初始分配 以来必须保持不变” “
。
一些不相关的建议:比较字符串时应该使用equals
运算符。例如,if ("".equals(newWord))
。否则,您将比较两个 String 对象的内存地址而不是它们的值。
不过,您可能需要共享您的 matchCase
方法以确保解决所有错误。
关于java - 如果第一个索引与字符串匹配,如何读取并返回数组的第二个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47586690/