2017-10-03 4 views
1

JavaでScannerユーティリティを使用する場合、特定の行をスキャンする方法や、行を2回スキャンする方法はありますか? scanner.nextLine()を使用しているときと同じように、この行にもう一度戻るにはどうすればいいですか?または、どのように行を2回読むのですか?それは可能ですか?javaでスキャナを使用して特定の行をスキャンする方法は?

+0

このように使用するつもりはありません。入力は、順番に消費される要素の1つのシーケンス(より良い用語がない)です。 – Henry

+0

スキャナは行の履歴を保持しません。あなたはそれを自分で行う必要があります。 ArrayListやそのようなものに行を格納してください。 – slipperyseal

答えて

0

私はあなた自身がスキャナでこれを行うことはできませんが、BufferedInputStreamの方法mark()reset()を使用して以前に読んだ位置に戻ることができます。

+0

これは 'Scanner'がいくらかのバッファリングを行う可能性があるため、非常に壊れやすいでしょう。 – Henry

+0

@Henryは同じスキャナを使用しません。 –

3

残念ながら何の

Scannerstreamsを読み取るために作成されていないと、彼らは「ストア」、彼らが読んで情報をないました。インターネット上で何らかの送信を読んでいると、元に戻って再び読むことができません。スキャナはfilesをファイルからinput streamを作成し、すべての派手なエンコーディングとそのすべてを処理することでインターネット伝送と同様に処理します。

ファイルから行をもう一度読みたい場合や、別の行に戻す場合は、スキャナを閉じて新しいスキャナオブジェクトを作成し、再度優先行に移動してください。

クイック例:

一つのアプローチは、ループに次のようになります。

のは、私たちが名を含むファイル内を検索するためにそれを頼む上記の名前の名前を探しているとしましょう(名前)を読み取り、それが私たちの名前と一致するかどうかを確認し、読み取った行を保存している場合はスキャナを閉じ、新しいスキャナオブジェクトを作成して再度ループ処理を開始し、今度は、私たちが探していた名前の前に線に着いたときに止まり、バン!

私の意見では、スキャナから読み取ったすべての情報(例の名前)をある種のlist(この例ではarraylistが完璧です)に保存することになります。そのリストを使用して2行目を読み込み、5行目(リストの5番目の要素)を読むか、前の行に戻す

希望するコードが必要な場合はお気軽にお尋ねください:)

1

スキャナはそれを行うために構築されていなかった - Plusは、スキャナクラスは、すべての

.nextLine()はちょうどあなたの全体の行(最初の1)を与えるで任意の行のいずれかの履歴を保持せず、 .next()は最初の単語を与えるだけです。行/単語/文字は格納されません。

関連する問題