replaceAll 粘贴部分不必要的额外字符串

replaceAll pastes part of unnecessary extra string

这是我的例子java代码:

String oldContent = "Book 1;Author 1;11|11\n" +
        "Book 2;Author 2;1|1\n" +
        "Book 3;Author 3;1|1\n" +
        "Book 4;Author 4;1|1\n" +
        "Book 5;Author 5;1|1\n";

String old = "Book 1;Author 1;11";
String newS = "Book 1;Author 1;12|12";

String content = oldContent.replace(old,newS);

System.out.println(content);

我正在尝试用字符串的新部分 (newS) 更新 oldContent(旧)中的部分字符串。结果应该是:

Book 1;Author 1;12|12
Book 2;Author 2;1|1
Book 3;Author 3;1|1
Book 4;Author 4;1|1
Book 5;Author 5;1|1

但实际上是:

Book 1;Author 1;12|12|11
Book 2;Author 2;1|1
Book 3;Author 3;1|1
Book 4;Author 4;1|1
Book 5;Author 5;1|1

这些额外的 |11。有人可以向我解释它是如何工作的以及为什么吗?我一直在尝试使用 replace()replaceAll(),但结果是一样的。

您正在用 Book 1;Autor 1;12|12 序列替换 Book 1;Author 1;11|11 序列,但是第一行以 1:11|11 结尾。请注意行尾的额外 |11,它不会被处理并将附加到 Book 1;Autor 1;12|12.

要完全替换第一行,您需要:

String old = "Book 1;Autor 1;11|11";
String newS = "Book 1;Autor 1;12|12";
String content = oldContent.replace(old, newS);

注意!您在 Author 个单词中有错字:

String old = "Book 1;Author 1;11|11";
String newS = "Book 1;Author 1;12|12";
String content = oldContent.replace(old, newS);