2016-04-14 24 views
1

私の書式設定がゴミであれば申し訳ありません。 私は2つの文字列とブール値をarrayListに次のように追加しようとしています。java:NoSuchElementException:arrayListへの読み込み

while((in.hasNextLine())){ 
    list.add(new Task(in.next(),in.next(), in.hasNextBoolean())); 
    } 

私はそのような要素の例外が発生し続ける。 whileループを離れて取る場合

list.add(new Task(in.next(),in.next(), in.hasNextBoolean())); 

これはうまく機能しますが、テキストファイルの最初の行だけを追加できます。 ループまたはスキャナに何か問題がありますか?

try { 
     in = new Scanner(f1); 
    } catch (FileNotFoundException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    while((in.hasNextLine())){ 
    list.add(new Task(in.next(),in.next(), in.hasNextBoolean())); 
    } 

f1は、ファイルf1 = new File( "src/mylist.txt")として宣言されています。

助けがあれば助かります。ありがとう!

+0

'in.next()、in.next()、in.hasNextBoolean()'これはどう思いますか? – Satya

+0

申し訳ありませんが、私はあなたが何を求めているのかよく分かりません。 –

+1

'hasNextBoolean()'はブール値を消費しません。 ---最後の 'next()'(または 'nextBoolean()')の呼び出しの後でも、 "cursor"はまだ行末にあるので、最後の行が改行で終わると、 'hasNextLine '要素がなくてもtrueを返します。 --- 'Scanner 'を使って3つの値の行を読むのは、*非常に*エラーが起こりやすいです。もっと制御された解析のために、 'BufferedReader'、' readLine() '、' split() 'を使うことを提案してください。 – Andreas

答えて

1

NoSuchElementExceptionin.next()で例外がスローされます。list.add(new Task(in.next(),in.next(), in.hasNextBoolean()))にあります。

およびin.next()の場合、PatternScannerに使用して次のトークンと一致させない場合は、行全体を一致させるには、デフォルトのPatternprivate static Pattern FIND_ANY_PATTERN = Pattern.compile("(?s).*")を使用します。それはin.next()が行全体を読み取る原因になります。

だからlist.add(new Task(in.next(),in.next(), in.hasNextBoolean()))NoSuchElementExceptionを投げます。あなたは2度読んでいますが、1度だけチェックします。

関連する問題