2016-09-20 2 views
0

を占めたときにも、スキップScanner.nextLine()。ここでは、ファイルの例です:Javaの - 私はタブ区切りで行毎にファイルから読み取るしようとしている新しい行

state 0 start 
state 5 accept 
transition 0 0 1 x R 
transition 1 0 0 x R 

私はファイルのScannerオブジェクトを作成し、\tに区切り文字を設定します。次の行がある限り、ファイルをループします。私は、行がstateまたはtransitionで始まっているかどうかをチェックし、次の情報を得たいと思います。 stateで始まる行の場合には、私は、それぞれ0startを得るためnextInt()を使用し、next()。次に、次の行に進み、プロセスを繰り返すという問題が発生します。私はnextLine()を使用しています。それは物事が醜いところです。

私はnextLine()は、改行文字を消費しないことを承知しているので、私はそれを2回使用することを考えて、それはそれはそう問題の多くを作成します。

Scanner sc = new Scanner(file); 
sc.useDelimiter("\t"); 

while(sc.hasNextLine()) 
{ 
    if(sc.next().equals("state") == true) 
    { 
     int stateNumber = sc.nextInt(); 
     String state = sc.next(); 
     sc.nextLine(); 
    } 
    sc.nextLine(); 
} 

これは、問題を引き起こしている尊敬するコードのようです。

私はどのようにnext()作品誤解AMまたは私は他の完全に何かが足りないのですか?

which (sc.hasNextLine()) { 
    String line = sc.nextLine(); 
    String[] parts = line.split("\\t"); 

    if (parts[0].equals("state")) { 
     // construct custom object here 
    } 
} 

、あなたの元に固執する場合:

+0

実際に情報を読もうとしているとしたら、どうしますか? –

+0

私はその情報を受け取り、それを使ってカスタムオブジェクトを構築しています。 – John

答えて

1

1つのオプションは、ここで簡単にデリミタ(タブ)個々のコンポーネントを取得することにより、一度の各行全体を読み込み、その後、分割するだろうあなたが失われ、全体のラインにつながるれ、nextLine()への2つの通話を発信した"state"含むこれらの行について

while(sc.hasNextLine()) { 
    if (sc.next().equals("state")) { 
     int stateNumber = sc.nextInt(); 
     String state = sc.next(); 
    } 

    // consume the entire remaining line, line break included 
    sc.nextLine(); 
} 

:アプローチは、これを使用します。

+0

私はそれについて考えましたが、それは本質的にスキャナの目的を破っていませんか?なぜそれを 'FileInputStream'で使うのですか? – John

関連する問題