2017-05-07 160 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

相關問題