0

テキストファイル形式を知っているとします。

たとえば、各行には次のような 4 つのフィールドが含まれます。

最初の単語 2 番目の単語 3 番目の単語 4 番目の単語
firstword2 secondword2 thirdword2 fourword2
...

そして、それを完全にメモリに読み込む必要があります

このアプローチを使用できます:

テキストファイルを開く
EOFではない間
  行単位で読む
  各行をスペースで区切る
  各行から抽出された 4 つのフィールドを持つ新しいオブジェクトを作成します
  このオブジェクトをセットに追加します

わかりましたが、特別なサードパーティの Java ライブラリなど、他に良いものはありますか?

各テキスト行の構造を事前に定義し、何らかの関数でファイルを解析できるように

thirdpartylib.setInputTextFileFormat("format.xml");
thirdpartylib.parse(セット、「pathToFile」)

?

4

2 に答える 2

1

セパレータが何であるかを明確に知っている場合、提案されたアプローチは高速で信頼性が高く、コードのオーバーヘッドがほとんどありません。サードパーティのライブラリ(長いリストの場合はgoogle "java text file library")の利点は、作成者が気にする奇妙なケースを処理するためのコードがたくさんある可能性が高いことです。欠点は、処理しているシンプルで信頼性の高いテキストファイル形式を使用している場合、おそらく必要以上のコードになることです。

これを自分で行うことの利点は、大量のデータがある場合に考慮すべきスケーラビリティの問題を含め、要件に正確に合わせてコードを調整できることです。サードパーティのライブラリがファイルを完全に読み取ることがよくありますが、たとえば数百万行ある場合は実用的ではない可能性があります。

私の推薦はあなた自身を書いて、あなたがどこに着くかを見るために1時間かそこらを費やすことです。あなたはほんの少しの努力でそれを割ることができます。データ形式に関するさまざまな特別な問題で解決する複雑な問題があることが判明した場合は、ライブラリを探し始めてください。

于 2010-04-26T10:40:55.407 に答える
1

次のように実行できます。

// Assuming a Reader called in and a Set called mySet

String line = in.readLine();
while(line != null)
{
  String[] splat = line.split(" ");
  mySet.add(new Widget(splat[0], splat[1], splat[2], splat[3]));
  line = in.readLine();
}

しかし、「より良い」とは何を意味するのかをより明確に定義する必要があります。上記のアプローチは、「悪い」入力では適切に動作しませんが、かなり高速になります (実際には Set の実装に依存します。常にサイズを変更している場合は、パフォーマンスが低下する可能性があります)。

XML を使用してスキーマを定義すると、解析する前に入力を検証でき、おそらくオブジェクトの作成が合理化されますが、各行に 4 つの文字列を含めることはできません (XML タグなどが必要になります)。サードパーティ ライブラリの例については、XMLBeansを参照してください。

于 2010-04-26T10:58:11.260 に答える