私はこの辞書を書き直そうとしています:アルファベット順ではなく長さでソートされた Dictionary.txt 。次のコードがあります(main(String[] args)内):
BufferedReader read = new BufferedReader(new FileReader(new File(DIC_READ_PATH)));
BufferedWriter write= new BufferedWriter(new FileWriter(DIC_WRITE_PATH),1);
ArrayList<String> toWrite = new ArrayList<String>();
for (int a = read.read(); a != -1; a = read.read()){
char c = (char) a;
toWrite.add("" + c + read.readLine());
}
read.close();
Collections.sort(toWrite, new MyComparator());
for (int a = 0; a <= 70000; a += 10000){
write.write(toWrite.subList(a, a + 10000).toString().replaceAll("[\\[,\\]]", "").replaceAll(" ", "\n"));
write.flush();
}
write.write(toWrite.subList(80000, toWrite.size()).toString().replaceAll("[\\[,\\]]", "").replaceAll(" ", "\n"));
write.close();
マイコンパレータ:
public class MyComparator implements Comparator<String> {
@Override
public int compare(String arg0, String arg1) {
// TODO Auto-generated method stub
if (arg0.length() == arg1.length()){
return arg0.compareTo(arg1);
}
return arg0.length() < arg1.length() ? -1 : +1;
}
}
Arraylist はうまくソートされますが、文字列を書き込むと、8 ワードは書き込まれません。BufferedWriter のバッファーを変更してみましたが、小さいバッファーが役立つことがわかったので、バッファーを 1 に設定しました。これを見つけました: Buffered Writer Java Limit / Issuesを書き、最後に閉じるたびにフラッシュを試みました (後でバッファーを変更しても) )。それでも 80368 ではなく 80360 語が表示されます。なぜ単語の完全なリストを書き込めないのですか? 別の BufferedWriter を使用する必要がありますか? もしそうなら、すでに書かれているものを上書きせずに使用するにはどうすればよいですか?