Java noobの種類、およそ6種類のストリーム+スキャナの間を反転して、必要なすべてを行う方法が見つからない。特定の構文に従うファイルを解析するアルゴリズムを実装しようとしています。次の文字を括弧またはコンマであるかどうかを調べるために必要な場所がいくつかあり、文字列と小数値を読み取ることができる必要があります。私はそれがダブルを読むことを試みた点までストリームで作業していました。 doubleはバイナリ形式ではないので、DataInputStreamは私が望むものではありません。Javaとの混合データの解析
私はそのgetNextFloatスキャナを使用することができますが、スキャナを使用しての問題は、ファイルには、実際の区切り文字がないです:私は、その後、スキャナとの区切り文字として(
,
:
)
を指定した場合(test:1.234,rightTest:5.6789)
は、区切り文字の存在をテストする能力を失います(私はthionkです、それは区切り文字を食べるように見えるからです)。これらのブロックはさまざまな方法で入れ子にすることができるので、次の文字をテストして、かっこが開いているかどうかを確認し、別のロジックに分岐する必要があることがよくあります。私。それはツリーを形成します(ただし、それは私の宿題であるため、ツリーを解析するための正しいコードは作成しないでください)。
私はスキャナーを使い果たして、小数点の値を解析する方法しか分からない場合は、ストリームで元のソリューションに戻ります。私は "あなたがこれらの文字の1つを見つけるまで、"私はstream.ReadUntil( "、)")と言うことができるようにするために読んで何かが必要です。小数には常にコンマまたは閉じ括弧が続きます。ハックとして、私はたぶん一度に1つの文字を読むでしょう。これは "test"や "rightTest"のような文字列を取得するのと同じことですが、それは本当にひどいと感じました。
私が知っている唯一のオプションは、文字列トークナイザで何かがわかっていますが、例からわかるように、ファイル全体をトークン化してストリームを使用するという目的を打ち負かす必要があります。これらのファイルは本当に大きくなることがあります。私自身はexersizeと同じように、この割り当てにはまったく問題はありませんが、不要な場合はすべてをメモリに入れないようにしてみたいと思います。
だから基本的に私が探している私は(
,
:
)
ときnecesaryをチェックし、またする能力を持つことができるように次の文字を覗くことができるように、ファイルIOの力学上のいくつかの助けであります:
までの文字列を読み、:
または)
=ファイルのサンプルを提供 –