2

タイトルが明確かどうかはわかりませんが、基本的には、ファイルから 1 行のテキストを読み取り、それを 8 つの異なる文字列変数に分割する必要があります。各行には、同じ順序 (タイトル、著者、価格など) で同じ 8 つのチャンクがあります。したがって、テキストの各行に対して、最終的に 8 つの文字列を作成したいと考えています。

最初の問題は、行の最後の 2 つのフィールドが存在する場合と存在しない場合があることです。そのため、stringTokenizer.hasMoreTokens を使用して何かを行う必要があります。そうしないと、フィールド 7 と 8 が存在しないときに乱雑に終了します。

理想的には for ループの 1 回で実行したいのですが、8 つ (または 6 つ) の文字列すべてを正しく埋めることができるように、フィールドの順序がどうなるかをそのループに伝える方法がわかりません。ネストされた 8 つの if ステートメントを使用するより良い方法があることを教えてください。

編集: String.split ソリューションは間違いなくその一部であるように思われるので、stringTokenizer の代わりにそれを使用します。ただし、個々の文字列をコンストラクターに供給する最良の方法はまだわかりません。最善の方法は、クラスに配列を期待させてから、コンストラクターで次のようにすることです。

line[1] = isbn;
line[2] = title;
4

4 に答える 4

3

最善の方法は、StringTokenizer をまったく使用せず、String の分割メソッドを使用することです。文字列の配列を返し、そこから長さを取得できます。

ファイルの各行に対して、次の操作を実行できます。

String[] tokens = line.split("#");

tokensこれで 6 ~ 8 弦になります。を使用tokens.length()して数を調べ、配列からオブジェクトを作成します。

于 2008-10-25T13:46:49.283 に答える
2

正規表現はその方法です。split メソッドを使用して、着信文字列を文字列の配列に変換できます。

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#split(java.lang.String)

于 2008-10-25T13:22:10.123 に答える
1

キャプチャ グループを使用した正規表現は役に立ちますか? もちろん、式の一部をオプションにすることもできます。

1 行または 3 行のデータが役立つ場合があります。

于 2008-10-25T13:17:12.490 に答える
0

ひょっとして、これは CSV などのファイルですか? もしそうなら、例えばApache Commons CSV (彼らのページの代替へのリンクも) のような、あなたを助けるライブラリがあります。ファイル内の各行の String[] を取得します。配列のサイズを確認して、オプションのフィールドが存在するかどうかを確認してください。

于 2008-10-25T13:19:12.877 に答える