我正在研究一种名为Malyalam的语言,我正在尝试用最常用的单词制作一个单词频率图表。但是,我的文件中包含特殊字符和字母表。我只想删除这些文本文件。但是我遇到了很多麻烦。我对编程很新,我无法弄清楚。有人可以帮忙吗?
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 :(得分:1)
如果您想查找MALAYALAM
Script中的字符序列,可以使用正则表达式\p{IsMalayalam}
。
您还可以使用正则表达式MALAYALAM
Block在\p{InMalayalam}
中选择查找字符。不确定是否确实存在差异。
要消除所有非马拉雅拉姆语字符,您需要保留空格,以保持马拉雅拉姆语字符的序列分开。如果马拉雅拉姆语字符仅由空格以外的非马拉雅拉姆语字符分隔,则您可能希望用空格替换它们。
为了获得更好的效果,您不想在循环中使用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());
}