我正在使用字符串的替换方法。我有一个字符串的数组列表,我试图让用户选择一个字母从数组中删除和一个字母替换它。当我执行程序并在用户选择要替换的字符后,该数组保持不变。
有人可以解释为什么会这样吗?
我的数组列表称为“字符串”。我的代码处理替换函数的部分如下:
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);
}
答案 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);