Java 库/文件文本搜索建议/字符串拆分效率/如何使我的代码运行更快
所以,我有一个文本文件,有500000行,每行最多有100个单词,用空格和数字分隔。我从每行中提取每个单词,在我的项目中的其他几个文件(类似于我制作的本地词典)中搜索相应的字符串,这些文件可以有或没有该单词。基本上,输入时我有500k文件,输出时是同一个文件,只有英文单词(如果在另一种语言中找到,则必须翻译)。我的问题是,如何优化代码以更快地运行(目前,处理大约10行代码需要约1分钟30秒,因此理论上,处理整个文件至少需要5天的时间),我必须试着用最多一天的时间。现在,我是如何进行搜索的:Java 库/文件文本搜索建议/字符串拆分效率/如何使我的代码运行更快,java,string,file,search,Java,String,File,Search,所以,我有一个文本文件,有500000行,每行最多有100个单词,用空格和数字分隔。我从每行中提取每个单词,在我的项目中的其他几个文件(类似于我制作的本地词典)中搜索相应的字符串,这些文件可以有或没有该单词。基本上,输入时我有500k文件,输出时是同一个文件,只有英文单词(如果在另一种语言中找到,则必须翻译)。我的问题是,如何优化代码以更快地运行(目前,处理大约10行代码需要约1分钟30秒,因此理论上,处理整个文件至少需要5天的时间),我必须试着用最多一天的时间。现在,我是如何进行搜索的: Bu
BufferedReader bufin = new BufferedReader(new FileReader("text_to_be_translated.txt"));
FileWriter fout = new FileWriter("Translated.txt", true);
for (i =0; i < 500000; i++) {
insertLine = new StringBuilder();
Line = bufin.readLine();
String[] array;
array = Line.split(" ");
for (String item : array) {
if (!isWord(item)) {
insertLine.append(item).append(" ");
} else {
if (isEnglish(item)) {
insertLine.append(item).append(" ");
} else {
check = getTranslate(item);
if (!check.equals(item)) {
insertLine.append(check).append(" ");
} else { insertLine.append(item).append(" ");
}
}
}
}
fout.write(insertLine.toString() + lineSeparator);
}
fout.close();
bufin.close();
首先,正如卡亚曼所说,你应该只打开一次字典 然后,您应该将输入的
text_to_be_translated.txt
按顺序(从A到Z)放入数组中
在那之后,你应该继续分析字典,这样你就只需要在字典中前进,而不必每次都从一开始就分析它(因为输入是有序的,假设字典是有序的)你能把你的整个“字典”放在地图上吗?还是太大了?
如果它适合地图,你可以在阅读“文本到翻译”之前构建地图。那么,每次访问词典都将是复杂的O(1)(充其量)
Map dictionary=initializeDictionary()
...
...
然后开始翻译:
public static String getTranslate(Map<String, String> dictionary, String wordToSearch) {
String translation = dictionary.get(wordToSearch);
if(translation == null){
return wordToSearch;
}
return translation;
publicstaticstringgetTranslate(映射字典,stringwordtosearch){
字符串翻译=dictionary.get(wordToSearch);
if(translation==null){
返回wordToSearch;
}
返回翻译;
您的getTranslate()
每次调用时都会打开并读取文件?我想知道为什么它很慢。
Map<String, String> dictionary = initializeDictionary()
...
...
public static String getTranslate(Map<String, String> dictionary, String wordToSearch) {
String translation = dictionary.get(wordToSearch);
if(translation == null){
return wordToSearch;
}
return translation;