stringTokenizerでテキストの行を定義済み変数に分割する最良の方法は何ですか

StackOverflow https://stackoverflow.com/questions/236387

  •  04-07-2019
  •  | 
  •  

質問

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

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

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

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

line[1] = isbn;
line[2] = title;
役に立ちましたか?

解決

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

ファイルの各行について、次のことができます:

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

tokens には6〜8個の文字列が含まれるようになります。 tokens.length()を使用してその数を調べ、配列からオブジェクトを作成します。

他のヒント

正規表現が道です。 splitメソッドを使用して、受信文字列を文字列の配列に変換できます

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

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top