【问题标题】:replacing characters in arraylist替换数组列表中的字符
【发布时间】:2014-01-24 18:22:24
【问题描述】:

我正在使用字符串的替换方法。我有一个字符串数组列表,并试图允许用户选择要从数组中删除的字母和替换它的字母。当我执行程序并且用户选择要替换的字符后,数组保持不变。

有人能解释一下为什么会这样吗?

我的数组列表称为“字符串”。我处理替换功能的代码部分如下:

public void letter () {

            int b;

            Scanner replaceLetter = new Scanner(System.in);
            System.out.println ("What letter would you like to remove?");
            String badLetter = replaceLetter.next();
            System.out.println ("What letter would you like to add?");
            String newLetter = replaceLetter.next();
            for (b=0; b<strings.size(); b++) {
                    String replaceLetters  = strings.get(b);
                    replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);

            }
            System.out.print(strings);

    }

【问题讨论】:

    标签: java string arraylist replace replaceall


    【解决方案1】:
    replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);
    

    这将返回一个新的字符串而不更新它在数组列表中,所以你应该把它再次放在数组列表中

    strings.set(b, replaceLetters);
    

    【讨论】:

      【解决方案2】:

      这一行

      replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);
      

      仅更改replaceLetters 变量的值。它不会将其放回数组中。为此,您需要 ArrayList 类的 set 方法。在该行的正下方添加这一行。

      strings.set(b, replaceLetters);
      

      【讨论】:

        【解决方案3】:

        replaceAll 调用返回一个全新的 String 实例,您不会将其插入或替换到数组中。

        【讨论】:

          【解决方案4】:

          您所做的只是更新对replaceLetters 的引用,不是替换数组strings 中指定索引处的字符串。您应该添加以下行:

          strings.set(b, replaceLetters);
          

          到你的 for 循环结束:

           for (b=0; b<strings.size(); b++) {
             String replaceLetters  = strings.get(b);
             replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);
             strings.set(b, replaceLetters);
           }
          

          【讨论】:

            【解决方案5】:

            您必须再次将其放回 ArrayList 中。字符串在java中是不可变的。

            将其设置为现有位置。

            for (b=0; b<strings.size(); b++) {
               String replaceLetters  = strings.get(b);
               replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);
               strings.set(b, replaceLetters);
             }
            

            【讨论】:

            • +1 权限和代码需要加Strings.set(b,replaceLetters)
            • @SubhrajyotiMajumder 是的。照此编辑。
            猜你喜欢
            • 1970-01-01
            • 2012-04-26
            • 2022-11-30
            • 1970-01-01
            • 2014-05-29
            • 1970-01-01
            • 1970-01-01
            • 2023-04-02
            • 2019-02-16
            相关资源
            最近更新 更多