用数组中存在的字符串替换文本文件中的字符串

时间:2019-05-16 16:18:50

标签: java

我有一个包含内容的文本文件

data1
data2
data3

我需要通过查看数组来将字符串data1替换为data2并将data3替换为data4。 xs是一个包含data1和data3的数组。 xd是一个包含data2和data4的数组

此代码替换文本文件中的内容,即。 data3与data4,但不会用data2代替data1。

String originalFilePath = "C:\\Users\\GOMATHI\\Desktop\\str.txt";
String originalFileContent = "";

BufferedReader reader = null;
BufferedWriter writer = null;
try {
    reader = new BufferedReader(new FileReader(originalFilePath));

    String currentReadingLine = reader.readLine();
    while (currentReadingLine != null) {
        originalFileContent += currentReadingLine + System.lineSeparator();
        currentReadingLine = reader.readLine();
    }
    String modifiedFileContent, xy;

    for (int i = 0; i < 2; i++) {
        modifiedFileContent = originalFileContent.replaceAll(xs[i], xd[i]);

        writer = new BufferedWriter(new FileWriter(originalFilePath));

        writer.write(modifiedFileContent);
        writer.write(xy);
    }
}

2 个答案:

答案 0 :(得分:0)

在两个循环执行中,您都修改了原始(未修改)文件的内容。因此,只有最后的修改是可见的。

您只能使用修改后的版本:

String modifiedFileContent = originalFileContent;
for (int i = 0; i < 2; i++) {
    modifiedFileContent = modifiedFileContent.replaceAll(xs[i],xd[i]);
}

第二个问题是您在每次循环执行中都编写了修改。提取该文件,然后再运行一次:

for (int i = 0; i < 2; i++) { ... }
writer = new BufferedWriter(new FileWriter(originalFilePath));
writer.write(modifiedFileContent);
writer.write(xy);

答案 1 :(得分:0)

循环中有writer,所以

  1. 您在originalFileContent中将“ data1”替换为“ data2”,并将结果写入文件中。
  2. 再次在originalFileContent中将“ data3”替换为“ data4”,然后将结果写入文件。第一次替换的效果被丢弃了。

将替换循环与编写分开,并重新使用以前的替换结果:

String modifiedFileContent=originalFileContent;

for(int i=0;i<2;i++)
{
  modifiedFileContent = modifiedFileContent.replaceAll(xs[i],xd[i]);
}

writer = new BufferedWriter(new FileWriter(originalFilePath));
writer.write(modifiedFileContent);
writer.close();