java - 在 Java 中读取文件、替换单词并写入新文件

标签 java regex file-io arraylist

我正在尝试读取一个文本文件,然后将其放入 ArrayList 中,然后遍历该 ArrayList 并将任何出现的单词“this”替换为“**”。然后,我想将修改后的 ArrayList 放回到包含新编辑的文本的新文件中。

应用程序当前可以正确地将行读取到 ArrayList 中,并且可以写入新文件。但是,replaceWords 方法似乎没有按预期运行,即它没有被 ** 替换。任何帮助将不胜感激!

package com.assignment2s162305.answers;

import java.io.FileWriter;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

public class Question27 {

    private List<String> lines = new ArrayList<String>();

    // read original file to an ArrayList
    public String[] readOriginalFile(String filename) throws IOException {
        FileReader fileReader = new FileReader(filename);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String line = null;
        while ((line = bufferedReader.readLine()) != null) {
            lines.add(line);
        }
        bufferedReader.close();
        return lines.toArray(new String[lines.size()]);
    }

    // replace words with ****
    public void replaceWords() {
        Collections.replaceAll(lines, "this", "****");
        System.out.println(lines);
    }

    // write modified ArrayList to a new file
    public void writeToNewFile() throws IOException {
        FileWriter writer = new FileWriter("output.txt");
        for (String str : lines) {
            writer.write(str);
        }
        writer.close();
    }

}

package com.assignment2s162305.answers;

import java.io.IOException; 

public class Question27Test {  
    public static void main(String[] args) {  
        Question27 question27object = new Question27();

        String filename = "Hamlet2.txt";  

        try {  
            String[] lines = question27object.readOriginalFile(filename);
            System.out.println("______ORIGINAL DOCUMENT______\n");
            for (String line : lines) {  
                System.out.println(line);  
            }
            System.out.println("\n\n");
            question27object.replaceWords();
            question27object.writeToNewFile();
        } catch(IOException e) {  
            // Print out the exception that occurred  
            System.out.println("Unable to create "+filename+": "+e.getMessage());                
        }  
    }  
}

最佳答案

您的 replaceWords 方法有错误。要修复它,您需要遍历各行并在每行中进行替换。您所实现的是将所有等于 "this" 的行替换为 ****。所以这工作正常,但不是你想要的。

这个代码。这将修复它。

public void replaceWords() {
    ArrayList<String> lns = new ArrayList<String>();
    for (String ln : lines){
        lns.add(ln.replaceAll("this", "****"));
    }
    lines.clear();
    lines = lns;
    System.out.println(lines);
}

关于java - 在 Java 中读取文件、替换单词并写入新文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977488/

相关文章:

java - 我需要将搜索栏值设置为 -100 到 100 仅用于用户显示

java - 在安装更新期间保留文件夹及其内容

python - 从字符串中解析多个 FQDN

python - 您可以将文件内容转换为文件对象吗?

java - Java ProcessBuilder sudo bash 命令的正确命令格式是什么?

java - 是否可以在 Java 程序中确定系统限制(就像 Linux 上的 ulimit 一样)?

java - 理解量词

java - Reg 替换文本 block 第一次出现 + 最后一次出现

Node.js:使用 fs.writeFileSync 写入系统文件

c++ - 从以不同方式格式化的文件数据中读取。 C++