2017-05-07 157 views
1

我输入文件中有许多记录和样品,让我们说它(这里行号仅供参考)如何使用java删除文本文件中的特定字符串?

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

首先,您需要用新字符串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); 
} 

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

+0

感谢您的时间。但是,我的预期产出有一个错字。我现在编辑过。所以,请根据它向我提供解决方案。 – venk

+0

@venk我编辑了我的答案来解决这个问题。 – Titus

+0

明白了。谢谢你的回答Titus!我只是用空格替换列表项,line = line.replaceAll(“^”+ delete +“$”,“”);它解决了。 – venk

相关问题