2017-07-18 109 views
-1

我正在研究一種叫做Malyalam的語言,我正在試圖用最常用的單詞來製作詞頻圖表。但是,我的文件中有特殊字符和字母表。我只想從文本文件中刪除這些文件。但是,我遇到了很多麻煩。我對編程非常陌生,我無法弄清楚。誰能幫忙?從文本文件中刪除所有ASCII字符

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader;  
import java.io.FileWriter; 
import java.io.IOException;   
import java.io.Reader; 

public class Delete { 

    public static void replaceInFile(File file) throws IOException { 

     File tempFile = File.createTempFile("buffer", ".tmp"); 
     FileWriter fw = new FileWriter(tempFile); 

     Reader fr = new FileReader(file); 
     BufferedReader br = new BufferedReader(fr); 

     while(br.ready()) { 
      fw.write(br.readLine().replaceAll("<", "")); 
     } 

     fw.close(); 
     br.close(); 
     fr.close(); 

     tempFile.renameTo(file); 
    } 
    public static void main(String[] args) throws IOException 

    { 
     File jyothis = null; 
     replaceInFile(jyothis); 
    } 
} 
+0

當然可以。只需發佈您迄今爲止嘗試過的代碼,並指出您目前遇到的問題。 – markspace

+0

所以它不是一個文本文件。 – EJP

+0

我遇到的問題是能夠一次刪除所有Ascii字符以及如何引用我的文本文件 – Zach

回答

1

如果你想找到的字符序列從MALAYALAM Script,您可以使用正則表達式\p{IsMalayalam}

您還可以使用正則表達式\p{InMalayalam}選擇在MALAYALAM Block中查找字符。不確定是否真的有區別。

要消除所有非馬拉雅拉姆語字符,您希望保留空格,以保持馬列亞拉姆語字符序列的分離。如果馬拉雅拉姆語字符只被非馬拉雅拉姆語字符和其他空格分隔,那麼您可能希望用空格替換它們。

爲了獲得更好的性能,你不希望使用String.replaceAll()一個循環裏面,所以你會做這樣的:

File tempFile = File.createTempFile("buffer", ".tmp"); 
try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(tempFile))); 
    BufferedReader in = new BufferedReader(new FileReader(file))) { 

    Pattern p = Pattern.compile("\\p{IsMalayalam}+"); 
    StringBuilder buf = new StringBuilder(); 
    for (String line; (line = in.readLine()) != null;) { 
     buf.setLength(0); 
     for (Matcher m = p.matcher(line); m.find();) { 
      if (buf.length() != 0) 
       buf.append(' '); 
      buf.append(m.group()); 
     } 
     if (buf.length() != 0) 
      out.println(buf); 
    } 
} 

對於一個簡單的實現,你可以這樣做(請注意使用的在正則表達式中大寫P):

File tempFile = File.createTempFile("buffer", ".tmp"); 
try (PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(tempFile))); 
    BufferedReader in = new BufferedReader(new FileReader(file))) { 

    Pattern p = Pattern.compile("\\P{IsMalayalam}+"); 
    for (String line; (line = in.readLine()) != null;) 
     out.println(p.matcher(line).replaceAll(" ").trim()); 
} 
+0

我如何參考程序中的文本文件?我正在使用程序eclipse – Zach

+2

只是一個警告。這假定FileReader正確讀取文件(默認本地平臺編碼)。 –

+0

@Zach你是什麼意思「引用我的文本文件」?此代碼完全像您的代碼一樣「引用」您的文件。這是你的代碼片段。您當然仍然會使用生成的文件進行重命名或任何想要的操作。 – Andreas