查找并替换ArrayList中一系列字符串中第一次出现的字符串

时间:2016-03-12 00:30:28

标签: java string arraylist intellij-idea replace

我有一个ArrayList,其中包含一系列以&#34形式的笔记;取出垃圾","做菜"我有一个注释类,其中有一个方法应该找到并替换用户给出的第一个字符串,例如" do",在每个音符中(如果有的话)并替换该字符串与用户给出的新字符串。例如:如果我有多个音符以#34开头,那么x" "做"在每个笔记中应该变成"不要"。到目前为止,这是我的方法:

public void findAndReplaceFirst(String old, String newWord) {
            for (int i = 0; i < notes.size(); i++) {
                String note = notes.get(i);
                if (note.contains(old)) {
                    int loc = note.indexOf(old);
                    int len = old.length();
                    String temp = note.substring(0, loc ) + note.substring(loc + len, note.length());
                    String newString = temp.substring(0, loc) + newWord + temp.substring(loc, temp.length());
                } else {
                    String newString = note;
                }
            }
        }

然而,当我运行main方法时,一串音符没有变化,我不明白为什么。有人能告诉我方法在哪里犯了错误吗?

2 个答案:

答案 0 :(得分:2)

String保持不变,因为Java不允许将变量传递给方法。在Java中,所有对象都按值传递给方法。您必须从newString方法返回findAndReplaceFirst

您还可以使用String类中定义的replaceFirst方法:

public String replaceFirst(String regex, String replacement);

假设您要使用某些用户输入替换所有出现的“do”,以下代码使用List的{​​{1}}方法替换特定索引处的元素。
< / p>

假设set(int index, E element)notes的类型或子类型:

List<String>

答案 1 :(得分:1)

您创建了一个名为newString的已修改字符串,但实际上您必须使用set()将其放回列表中。在for循环结束之前,添加notes.set(i, newString);