英文:
Replacing a line in a textile leaving remains of oldLine
问题
我有一个文本文件,名为```inventory.txt```,其中包含
cats, 10, 15
dogs, 10, 15
我想要运行一段代码,在这段代码中,我可以将```cats```替换为```replacee```,将```turtles, 5, 5```替换为```replacer```,得到
turtles, 5, 5
dogs, 10, 15
然而,当我这样做时,第一个逗号后面的所有内容仍然与我的```replacer```一起。我可以将```cats```仅替换为```turtles```,而不包括```5, 5```,这将给我
turtles, 10, 15
dogs, 10, 15
但是,当我尝试在第一个逗号之后添加```5, 5```时,它仍然保留在输出中,如下所示。
**代码**
```java
public void modifyItems() throws IOException {
File file = new File("src/inventory.txt");
String line = "";
String oldLine = "";
String replacee;
String replacer;
BufferedReader reader = new BufferedReader(new FileReader(file));
while ((line = reader.readLine()) != null) {
oldLine += line + System.lineSeparator();
}
System.out.println(oldLine);
reader.close();
System.out.println("输入要编辑的项目");
replacee = scan.next();
scan.nextLine();
System.out.println("输入更新的信息");
replacer = scan.nextLine();
String newLine = oldLine.replaceAll(replacee, replacer);
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(newLine);
writer.flush();
writer.close();
}
输出
cats, 10, 15
dogs, 10, 15
输入要编辑的项目
cats
输入更新的信息
turtles, 5, 5
文本文件输出
turtles, 5, 5, 10, 15
dogs, 10, 15
<details>
<summary>英文:</summary>
I have a textfile, ```inventory.txt```, with
cats, 10, 15
dogs, 10, 15
I want to run a code where I can input ```cats``` as ```replacee``` and ```turtles, 5, 5``` as the ```replacer```, giving me,
turtles, 5, 5
dogs, 10, 15
however, when I do this, everything after the first comma remains in addition to my ```replacer```. I can replace ```cats``` with JUST ```turtles``` with no ```5, 5```, giving me
turtles, 10, 15
dogs, 10, 15
but when I try adding the ```5, 5``` after the first comma remains, output below.
**Code**
public void modifyItems() throws IOException {
File file = new File("src/inventory.txt");
String line = "";
String oldLine = "";
String replacee;
String replacer;
BufferedReader reader = new BufferedReader(new FileReader(file));
while ((line = reader.readLine()) != null) {
oldLine += line + System.lineSeparator();
}
System.out.println(oldLine);
reader.close();
System.out.println("enter the item you want to edit");
replacee = scan.next();
scan.nextLine();
System.out.println("enter the updated information");
replacer = scan.nextLine();
String newLine = oldLine.replaceAll(replacee, replacer);
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(newLine);
writer.flush();
writer.close();
}
**Output**
cats, 10, 15
dogs, 10, 15
enter the item you want to edit
cats
enter the updated information
turtles, 5, 5
**Textfile output**
turtles, 5, 5, 10, 15
dogs, 10, 15
</details>
# 答案1
**得分**: 0
```java
// 字符串的 `replaceAll` 方法执行的是你在代码中看到的操作。
// 它会将你输入的文本替换为你输入的库存字符串。
// 你需要使用的方法是字符串的 `startsWith` 方法。
// 你需要保留一个已读行的数组,这样你就可以找到要替换的正确行。
public void modifyItems() throws IOException {
File file = new File("src/inventory.txt");
// 将100替换为足够大的数字,以容纳整个文件。
String[] oldLine = new String[100];
BufferedReader reader = new BufferedReader(
new FileReader(file));
int count = 0;
String line = "";
while ((line = reader.readLine()) != null) {
oldLine[count] = line + System.lineSeparator();
System.out.println(line);
count++;
}
reader.close();
System.out.println("输入要编辑的项目");
String replacee = scan.nextLine();
System.out.println("输入更新后的信息");
String replacer = scan.nextLine();
BufferedWriter writer = new BufferedWriter(
new FileWriter(file));
for (int i = 0; i < count; i++) {
if (oldLine[i].startsWith(replacee)) {
writer.write(replacer);
} else {
writer.write(oldLine[i]);
}
}
writer.flush();
writer.close();
}
英文:
The String
replaceAll
method does what you've seen in your code. It replaces the text you input with the inventory string you input.
The method you want to use is the String
startsWith
method.
You need to keep an array of lines read, so you can find the correct line to replace.
public void modifyItems() throws IOException {
File file = new File("src/inventory.txt");
// Replace 100 with a large enough number to hold
// the whole file.
String[] oldLine = new String[100];
BufferedReader reader = new BufferedReader(
new FileReader(file));
int count = 0;
String line = "";
while ((line = reader.readLine()) != null) {
oldLine[count] = line + System.lineSeparator();
System.out.println(line);
count++;
}
reader.close();
System.out.println("enter the item you want to edit");
String replacee = scan.nextLine();
System.out.println("enter the updated information");
String replacer = scan.nextLine();
BufferedWriter writer = new BufferedWriter(
new FileWriter(file));
for (int i = 0; i < count; i++) {
if (oldLine[i].startsWith(replacee)) {
writer.write(replacer);
} else {
writer.write(oldLine[i]);
}
}
writer.flush();
writer.close();
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论