我正在尝试将我拥有的字典文件拆分成多个不同长度的字典,例如,如果我想把它拿出并放入长度为2,3,4,...... n的较小字典中,其中然后我可以更快地搜索它们。当我说得更快时,我的意思是我将知道输入长度,因此访问相应的长度字典(整体的一小部分)将意味着更快的访问。这是我当前的实现,它生成文件但不按我的意愿写入它们。理想情况下,例如长度为2的所有单词都将写入length2文本文件中。有人有什么建议吗?
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
FileReader fr = new FileReader("dictionary.txt");
PrintWriter l2 = new PrintWriter("dictionary_length2.txt", "UTF-8");
PrintWriter l3 = new PrintWriter("dictionary_length3.txt", "UTF-8");
PrintWriter l4 = new PrintWriter("dictionary_length4.txt", "UTF-8");
PrintWriter l5 = new PrintWriter("dictionary_length5.txt", "UTF-8");
PrintWriter l6 = new PrintWriter("dictionary_length6.txt", "UTF-8");
PrintWriter l7 = new PrintWriter("dictionary_length7.txt", "UTF-8");
PrintWriter l8 = new PrintWriter("dictionary_length8.txt", "UTF-8");
PrintWriter l9 = new PrintWriter("dictionary_length9.txt", "UTF-8");
PrintWriter l10 = new PrintWriter("dictionary_length10.txt", "UTF-8");
PrintWriter l11 = new PrintWriter("dictionary_lengty11.txt", "UTF-8");
PrintWriter l12 = new PrintWriter("dictionary_length12.txt", "UTF-8");
PrintWriter l13 = new PrintWriter("dictionary_length13.txt", "UTF-8");
PrintWriter l14 = new PrintWriter("dictionary_length14.txt", "UTF-8");
PrintWriter l15 = new PrintWriter("dictionary_length15.txt", "UTF-8");
PrintWriter l16 = new PrintWriter("dictionary_length16.txt", "UTF-8");
PrintWriter l17 = new PrintWriter("dictionary_length17.txt", "UTF-8");
PrintWriter l18 = new PrintWriter("dictionary_length18.txt", "UTF-8");
PrintWriter l19 = new PrintWriter("dictionary_length19.txt", "UTF-8");
PrintWriter l20 = new PrintWriter("dictionary_length20.txt", "UTF-8");
PrintWriter l21 = new PrintWriter("dictionary_length21.txt", "UTF-8");
BufferedReader tr = new BufferedReader(fr);
String temp;
int temp_length;
for(int i = 0; i < 60388; i++){
temp = new String(tr.readLine());
temp_length = temp.length();
if(temp_length == 2)
l2.println(temp);
if(temp_length == 3)
l3.println(temp);
if(temp_length == 4)
l4.println(temp);
if(temp_length == 5)
l5.println(temp);
if(temp_length == 6)
l6.println(temp);
if(temp_length == 7)
l7.println(temp);
if(temp_length == 8)
l8.println(temp);
if(temp_length == 9)
l9.println(temp);
if(temp_length == 10)
l10.println(temp);
if(temp_length == 11)
l11.println(temp);
if(temp_length == 12)
l12.println(temp);
if(temp_length == 13)
l13.println(temp);
if(temp_length == 14)
l14.println(temp);
if(temp_length == 15)
l15.println(temp);
if(temp_length == 16)
l16.println(temp);
if(temp_length == 17)
l17.println(temp);
if(temp_length == 18)
l18.println(temp);
if(temp_length == 19)
l19.println(temp);
if(temp_length == 20)
l20.println(temp);
if(temp_length == 21)
l21.println(temp);
}
tr.close();
l2.close();
l3.close();
l4.close();
l5.close();
l6.close();
l7.close();
l8.close();
l9.close();
l10.close();
l11.close();
l12.close();
l13.close();
l14.close();
l15.close();
l16.close();
l17.close();
l18.close();
l19.close();
l20.close();
l21.close();
System.out.println("Complete.");
}
}
答案 0 :(得分:3)
Tangental“回答”如下。 (这个
每当xN
表格中有一组变量(例如l2
,l3
,l22
)时,他们通常 替换为List集合类型,例如ArrayList。
这只是一个展示如何可以减少重复和固定边界的示例:
int MAX_WORD_LEN = 22; // making this dynamic left as an excercise
List<PrintWriter> writers = new ArrayList<PrintWriter>();
for (int i = 0; i <= MAX_WORD_LEN; i++) {
PrintWriter w = new PrintWriter("dictionary_length" + i + ".txt", "UTF-8");
writers.Add(w);
}
String line;
while ((line = tr.readLine()) != null) {
int len = line.length();
if (len < writers.size()) {
writers.get(len).println(line);
}
}
for (PrintWriter w : writers) {
w.close();
}
可以进行轻微调整,以便不创建“0”或“1”文件。