替换arraylist中的字符

时间:2014-01-07 06:35:18

标签: java string arraylist replace replaceall

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

有人可以解释为什么会这样吗?

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

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);

    }

5 个答案:

答案 0 :(得分:3)

您所做的只是更新对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);
 }

答案 1 :(得分:1)

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

将其设置为现有位置。

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

答案 2 :(得分:1)

这一行

replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);

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

strings.set(b, replaceLetters);

答案 3 :(得分:0)

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

答案 4 :(得分:0)

replaceLetters = replaceLetters.replaceAll(badLetter,newLetter);

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

strings.set(b, replaceLetters);