2014-01-22 122 views
-1

我試圖用包含空格的文本文件填充字符串的arraylist,使得arraylist中的每個字符串之間將包含一個空格其中的第一個和第二個數字,並且沒有前導或尾隨空格。我不幸遇到了以下錯誤順序運行它時:java.util.NoSuchElementException當使用.equals,arraylist和讀取文件與掃描儀

Exception in thread "main" java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at scannerTest.main(scannerTest.java:26) 

以下是我的代碼:

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 

public class scannerTest 

{ 

private static ArrayList<String> myStore = new ArrayList<String>(); 

public static void main(String[] args) 
{ 
    int id = 0; 
    int inv = 0; 
    boolean idStarted = false; 
    boolean idFinished = false; 
    try 
    { 
     Scanner file = new Scanner(new File("file50.txt")); 
     System.out.println("File: " + "file50.txt"); 
     while (file.hasNextLine()) 
     { 
      for (int b = 0; b < (file.nextLine()).length(); b++) 
      { 
       if (!file.next().equals(" ")) 
       { 
        id = id + Integer.parseInt(file.next()); 
        idStarted = true; 
       } 
       if (idStarted = true && file.next().equals(" ")) 
       { 
        idFinished = true; 
       } 
       if (idFinished = true && !file.next().equals(" ")) 
        inv = inv + Integer.parseInt(file.next()); 
      } 
      String result = Integer.toString(id) + " " + Integer.toString(inv); 
      myStore.add(result); 
     } 
    }  
    catch (FileNotFoundException e) 
    { 
     System.out.println("ERROR: File '" + "file50.txt" + "' not found!"); 
    } 
    System.out.println(myStore); 
} 

}

文件看起來是這樣的:

3679  87 
    196  60 
17914  12 
18618  64 
    2370  65 
    584  85 
18524  34 
12024   5 
    6992  76 
18410  56 
    9267  68 
18995  56 
    6265  58 
    6835  94 
14151  82 
11485  39 
15559  33 
18465  27 
19967  45 
13520  38 
    5529  11 
    3433   5 
17911  96 
18181  60 
11549  88 
14896  81 
    184  14 
    4329  64 
18871  69 
15141  87 
11584  32 
14088  92 
18061   3 
    206  31 
13066   8 
19623  88 
12705  14 
    9351   8 
17753  70 
15917  51 
    768  85 
15814  60 
15320  82 
    8303  90 
    7282  73 
14092  48 
10629  19 
12917  63 
15006  53 
12328  63 

我看不出爲什麼錯誤發生在第26行:

if (!file.next().equals(" ")) 

我想要做的是檢查一行中的下一個對象是否爲空格,如果是這種情況,請忽略它。任何有關這個問題的幫助將不勝感激。

+0

每次你調用一個以'next'開頭的方法時,你正在讀取它。至少有兩種情況會立即跳出對你的代碼進行掃視,你會丟掉你讀到的東西 –

+0

http://docs.oracle.com/javase/tutorial/essential/io/scanning.html –

回答

1

如果您想重複使用,則需要將file.next()的值存儲在變量中。

調用next會增加它指向的位置。

嘗試

String val = file.next(); 

if (val.equals (" ") 
    . 

    . 

if (idStarted = true && val.equals(" ")) 
+0

我明白你的意思了,在這裏說,我實現了它,但我仍然得到同樣的錯誤。 – user3141179

+0

您使用nextLine也會導致此問題。使用getLine獲取字符串,然後解析該字符串。不需要再使用掃描儀。 –

0

你可以修剪你的輸入,並分配到一個字符串。那麼因爲每行只有兩個索引,所以可以用空格分隔符將它們拆分爲一個數組,並用空格將它們連接在一起。

public static void main(String[] args) 
{ 
    try 
    { 
     Scanner file = new Scanner(new File("test1/file50.txt")); 
     System.out.println("File: " + "file50.txt"); 
     while (file.hasNextLine()) 
     { 
      String test = file.nextLine().trim(); 
      String[] array = test.split("\\s+"); 

      myStore.add(array[0]+" "+array[1]); 
     } 

    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println("ERROR: File '" + "file50.txt" + "' not found!"); 
    } 

    for(int i=0;i<myStore.size();i++){ 
     System.out.println(myStore.get(i)); 
    } 

}