如何使用java删除文本文件中的特定字符串?

时间:2017-05-07 14:51:19

标签: java string

我的输入文件有很多记录和样本,让我们说它有(这里的行号仅供您参考)

 1. end 
 2. endline
 3. endofstory

我希望我的输出为:

 1. 
 2. endline
 3. endofstory

但是当我使用这段代码时:

import java.io.*;
public class DeleteTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
        File file = new File("D:/mypath/file.txt");
        File temp = File.createTempFile("file1", ".txt", file.getParentFile());
        String charset = "UTF-8";
        String delete = "end";
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
        PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(temp), charset));
        for (String line; (line = reader.readLine()) != null;) {
            line = line.replace(delete, "");
            writer.println(line);
        }
        reader.close();
        writer.close();
        }
        catch (Exception e) {
            System.out.println("Something went Wrong");
        }
    }

}

我得到的输出为:

 1. 
 2. line
 3. ofstory

你能帮我解决一下我期望的产出吗?

1 个答案:

答案 0 :(得分:1)

首先,您需要使用新字符串List item替换该行而不是空字符串。您可以使用line = line.replace(delete, "List item");执行此操作,但由于您只想将end替换为行中唯一的字符串,您必须使用以下内容:

line = line.replaceAll("^"+delete+"$", "List item");

根据您的编辑,您似乎确实要用空字符串替换包含end的行。你可以用这样的东西做到这一点:

line = line.replaceAll("^"+delete+"$", "");

此处,replaceAll的第一个参数是正则表达式,^表示字符串的开头,$表示结束。只有在该行上唯一的内容时,才会替换end

您还可以检查当前行是否是您要删除的行,只需在文件中写一个空行。

例如:

if(line.equals(delete)){
     writer.println();
}else{
     writer.println(line);
}

要为多个字符串执行此过程,您可以使用以下内容:

Set<String> toDelete = new HashSet<>();
toDelete.add("end");
toDelete.add("something");
toDelete.add("another thing");

if(toDelete.contains(line)){
     writer.println();
}else{
     writer.println(line);
}

这里我使用了一组我要删除的字符串,然后检查当前行是否是其中一个字符串。