1

私のデータ構造クラスの場合、最初のプロジェクトでは、曲のテキストファイルを解析する必要があります。

入力の例は次のとおりです
。ARTIST="unknown"
TITLE = "Rockabye Baby"
LYRICS ="木のてっぺんにあるRockabyeの赤ちゃん
風が吹くとクレードルが揺れ
ます弓が折れるとクレードルが倒れます
ベビークレードルとすべての
"

Artist、Title、LyricsをSongクラスのそれぞれの文字列フィールドに抽出する最良の方法を考えています。私の最初の反応は、スキャナーを使用して最初の文字を取り込み、その文字に基づいて、skip()を使用して必要な文字を進め、引用符で囲まれたテキストを読み取ることでした。

これを使用すると、入力のバッファリングに失敗します。フルソングのテキストファイルには、422K行を超えるテキストが含まれています。スキャナーはバッファリングなしでもこれを処理できますか?

4

3 に答える 3

3

このような場合は、おそらく正規表現を使用する必要があります。Matcher クラスは、バッファリングされた入力をサポートします。

find メソッドはオフセットを取るので、各オフセットでそれらを解析できます。

http://download.oracle.com/javase/1.4.2/docs/api/java/util/regex/Matcher.html

正規表現は、それ自体が全世界です。以前にそれらを使用したことがない場合は、ここから始めてhttp://download.oracle.com/javase/tutorial/essential/regex/準備してください。その努力は、必要な時間に見合うだけの価値があります。

于 2010-09-11T17:26:13.000 に答える
1

1つのトークンを使用してソースデータを解析できる場合は、先読みStreamTokenizerが選択される可能性があります。とを比較するを次に示します。StreamTokenizerScanner

于 2010-09-11T20:01:08.657 に答える
1

この場合、CSV リーダーを使用して、フィールド区切り文字「=」とフィールド区切り文字「"」(二重引用符) を使用できます。ARTIST、TITLE、および LYRICS に対して 1 つの行を取得するため、完全ではありません。

于 2010-09-11T20:27:19.553 に答える