如果第一个索引与字符串匹配,如何读取并返回数组的第二个索引?

时间:2017-12-01 04:34:45

标签: java string arraylist

我尝试使用以下参数编写translate方法。但是,每次运行该方法时,它都会跳过第一个if语句,然后右转到第二个for循环。

/ **      根据wordList中的数据翻译单词然后匹配大小写。 参数wordList包含翻译的映射。数据是 组织在一个ArrayList中,包含长度为2的String数组。第一个 cell(索引0)包含原始语言中的单词,称为key, 第二个单元格(索引1)包含翻译。 假设wordList中的项目按升序排序 根据第一个单元格中的键。 @param字样 要翻译的词。 @param wordList 包含转换映射的ArrayList。 @return wordList中的映射与原始映射相同。如果不 匹配在wordList中找到,它返回一个与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。但这是打印的唯一东西。我该如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

您正在将newWord初始化为值""newWord可能发生变化的唯一时间是在第一个循环中,它会立即跟随return语句,退出您的方法。可以达到if语句的唯一方法是,如果您在第一个循环期间没有返回,那么如果它到达if语句,那么newWord必须保持不变,因为它的初始赋值为""

一些不相关的建议:在比较字符串时应使用equals运算符。例如,if ("".equals(newWord))。否则,您将比较两个String对象的内存地址而不是它们的值。

您可能需要共享matchCase方法以确保解决所有错误。