2017-07-18 229 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