当前位置: 首页 > 知识库问答 >
问题:

当数组位于arraylist中时,如何访问它?

宫俊远
2023-03-14

我尝试做的总体目标是将字符串与数组的索引0(保存在arraylist中)进行比较,如果字符串相同(忽略大小写),则调用一个方法,将字符串的大小写与翻译的单词(保存在arraylist中数组的索引1处)匹配。当我运行这段代码并打印出翻译后的arraylist的内容时,我会得到所有“不匹配”字符。我假设这是因为我没有以正确的方式访问我想要的索引。请帮忙!

public static String translate(String word, ArrayList<String[]> wordList) { 
    if (word == "." || word == "!" || word == ";" || word == ":") {
        return word;
    }
    for (int i = 0; i < wordList.size(); i++) {
            String origWord = wordList.get(i)[0];
            String transWord = wordList.get(i)[1];

            if (word.equalsIgnoreCase(origWord)) { //FIXME may need to change if you need to switch from translated to original
                String translated = matchCase(word, transWord);
                return translated;
            }
    }
    String noMatch = Character.toString(Config.LINE_CHAR);     


    return noMatch;
}

样本数据和预期结果

word=“你好”

词表。获取(i)[0]=“你好”

词表。得到(i)[1]=“你好”

(word和wordList.get(i)[0]匹配,因此执行下一步)

调用match case方法并返回与原始单词大小写相同的翻译单词-

翻译为“你好”

返回已翻译的单词。

for循环遍历整个单词列表,直到找到匹配项,然后调用translate方法)

**

匹配Case的代码

 public static String matchCase(String template, String original) {
    String matched = "";
    if (template.length() > original.length()) {

        for (int i = 1; i <= original.length(); i++) {
            if (template.charAt(i-1) >= 'a' &&  template.charAt(i-1) <= 'z') {

                if (i == original.length()) {

                matched +=  original.substring(original.length() - 1).toLowerCase();

                }
                else {

                    matched += original.substring((i-1), i).toLowerCase();
                }

            }
            else if (template.charAt(i-1) >= 'A' && template.charAt(i-1) <= 'Z') {
                if (i == original.length()) {

                    matched += original.substring(original.length() - 1).toUpperCase();

                }
                else {

                    matched +=  original.substring((i-1), i).toUpperCase();

                }
            }
        }
        return matched;
     }
     else if (template.length() < original.length()) {
         int o;
            original.toLowerCase();
            for (int i = 1; i <= template.length(); i++) {
                if (template.charAt(i-1) >= 'a' &&  template.charAt(i-1) <= 'z') {
                    if (i == template.length()) {
                        matched += original.substring(original.length() - 1).toLowerCase();
                    }
                    else {
                        matched += original.substring((i-1), i).toLowerCase();
                    }
                }
                else if (template.charAt(i-1) >= 'A' && template.charAt(i-1) <= 'Z') {
                    if (i == template.length()) {
                        matched += original.substring(original.length() - 1).toUpperCase();
                    }
                    else {
                        matched += original.substring((i-1), i).toUpperCase();
                    }
                }
                String newMatched = matched + original.substring(i, original.length() - 1);
                matched = newMatched;
                newMatched = "";
            }

            return matched;
     }

   return original; 
}

共有1个答案

顾穆冉
2023-03-14

我已经测试了您的代码,它与您提供的示例配合得相当好。我帮不了你的忙。

然而,有一些错误需要通知和改进建议:

>

  • matchCase在模板短于翻译的单词时失败。
  • 永远不要将字符串与==进行比较。使用equals方法并查看原因。
  • 这并不重要,但是为什么noMatch总是计算的。为什么你不一次声明它为常量呢?

    公共静态最终字符串NO_MATCH=String.value(配置LINE_CHAR);

    更重要的是,我认为,matchCase在设计上并不真正相关,而且过于复杂。我认为你应该确定要翻译的单词都是小写还是大写,或者第一个字母都是大写,后面的字母都是小写。当长度不同时,你所做的(逐字比较大小写)并不真正相关。

    ...

  •  类似资料:
    • 我只想访问这个arraylist中的整数,这样我就可以将注释与其他数字进行比较。prs是Student类型的arraylist的名称,它包含整数和字符串。

    • 原始关闭原因未解决 我试图根据GPA将这个arraylist按升序排序。学生类封装了3条信息:学生编号、姓氏、平均分数。 所以我需要使用gradePointAverage对它们进行排序。

    • 问题内容: 我有以下数组,当我做得到: 我试图按如下方式访问数组: 但这显示了我: 未定义0 注意: 我从 Facebook SDK 4 获得此数组,所以我不知道原始的数组结构。 作为示例,如何访问数组中的值? 问题答案: 要访问或您如何使用两个不同的运算符。 数组 要访问数组元素,您必须使用,或者您不会看到太多,但也可以使用is 。 声明数组和访问数组元素之间的区别 定义数组和访问数组元素是两件

    • 问题内容: 我有以下JSON对象: 这是来自一个请求,我有成功。 问题是,即使dataJS在控制台中正确显示,我也无法访问JSON对象中的项目。有想法吗? 问题答案: 那是因为您的基础对象也是数组。 我怀疑那会有用

    • 问题内容: 我是python的新手,我想了解如何处理数组的元素。例如,如果我有: 我已经在python中定义了它们,例如: 我看到我无法参考,但是给了我一个结果。所以,我不明白如何访问这些数组的第二行?那会是吗?为了将它们乘以等,我将如何做? 问题答案: 如果你有 然后 将正常工作。就像您想要的那样,它指向第二列,第二行。 我不确定您做错了什么。 要乘以第三列中的单元格,您可以执行以下操作 它将适

    • 问题内容: 我试图在把手模板内的数组中指定项的索引: 使用这个: 如果上述方法不可行,我将如何编写一个可以访问数组中特殊项目的助手? 问题答案: 尝试这个: