2012-12-21 24 views
9

Javaについては、私はランクアマチュアですので、私の質問は愚かであれば容赦してください :-P 私は以下のコードを持っています。ファイル:.nextLine()Scannerをリセットする

while (scanNumOfLines.hasNextLine())  
    { 
    NumOfLines ++; 
    scanNumOfLines.nextLine(); 
    } 
    System.out.println("NumOfLines = "+NumOfLines); 

は、だから、罰金数えますが、私は別の目的のためにスキャナを再利用したいが、nextLineは、ファイルの最後の行に移動した、と私はに戻ってそれをリセットしたいです一行目。

(その代わり、私は他の目的のために別のスキャナを使用していた、と私には、これはそれがあるべきよりもエレガントなようです。)

私は、カウンタをリセットスキャナ方法がなければならないと確信していますゼロ?

おかげ

CJ

+0

どのようなカウンタですか?このカウンタはコード内にあり、 'Scanner'ではありません。 – EJP

答えて

4

あなたがScanner再宣言する必要があります。 nextLine()を呼び出すと、その行はバッファから削除され、Scannerから効果的に破棄されます。

従って、本質的には、です。それを行う方法はコンストラクタです。

Scannerオブジェクトには「カウンタ」はありません。代わりにコンベヤーベルトのように考えるベルトには、その上に何があるかについての知識や関心がありません。それはアイテムが残っている間、あなたに物事を吐き出すだけです。そして一度あなたがそれらを取ると、彼らは良いからそれから行っている。

-1

RandomAccessFileを使用し、方法seek()を使用して最初の行に戻ることができます。

+0

しかし、スキャナではありません。 – EJP

8

これは不可能です。

これを含まない理由は、それがサポートする広範囲の入力タイプです。 1つの例はストリームです。これらは渡された後の結果を格納しないので、リセットをサポートしません。

したがって、新しい優雅な方法は、Scannerを作成することです。多くのカスタム設定を行う場合は、ファクトリメソッドを作成します。

私はこれが既に回答されていますが、私はこのようなものを探していた場合、私は他の誰かがあまりにもあると確信しているので、私は私がこの問題を解決歩き回った道に貢献しようと思いまし実現
0
File file = new File("StoreData.txt"); 

Scanner reader = new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
     k++; 
     reader.nextLine(); 
} 
reader.close(); 
reader=null;  
//reset scanner   
reader=new Scanner(new FileInputStream(file)); 
while (reader.hasNext()) { 
    System.out.println(reader.nextLine());    
} 
+2

コードのみ?あなたの説明はどこですか? –

1

: として私の問題では、ユーザーの入力に基づいて何度もファイルを読み込む必要がありました。私のテストクラスには、ファイルを読み込んだスキャナのArrayListがあります。私が設定した方法では、ArrayListに1つ以上のスキャナが決して存在しませんが、ArrayListはオブジェクトの追加や削除に便利です。