2014-03-06 22 views
3
import java.util.Scanner; 
import java.io.*; 
import java.util.ArrayList; 

public class Test 
{ 
public static void main (String args[]) throws java.io.IOException 
    { 
    Scanner s = new Scanner(new File("filepath")); 
    ArrayList<Integer> list = new ArrayList<Integer>(); 
    while (s.hasNext()){ 
     if(s.hasNextInt()){ 
      list.add(s.nextInt()); 
     } 
    } 
    s.close(); 
    System.out.println(list); 
    } 
} 

我試圖從文本文件中讀取每行只有以下格式的整數:text integer text。將整數從文件讀取到arraylist中

這是我到目前爲止,但是當我編譯並運行它打印永不結束[]出於任何原因。

請注意,我改變了文件路徑只是爲了上傳到這裏,這不是問題。

回答

3

當我編譯並運行它打印永無止境

這個循環的罪魁禍首:

while (s.hasNext()){ 
    if(s.hasNextInt()){ 
     list.add(s.nextInt()); 
    } 
} 

考慮會發生什麼,當掃描儀hasNext,但無論那一個令牌,它不是int。在這種情況下,你的循環變成無限的,因爲循環體沒有消耗任何東西,使得掃描器處於與循環開始時完全相同的狀態。

要解決此問題,添加elseif,讀s.next(),而忽視了結果:

while (s.hasNext()){ 
    if(s.hasNextInt()){ 
     list.add(s.nextInt()); 
    } else { 
     s.next(); 
    } 
} 
0

試試這個:

import java.util.Scanner; 
import java.io.*; 
import java.util.ArrayList; 

public class Test 
{ 
    public static void main (String args[]) throws java.io.IOException 
    { 
     Scanner s = new Scanner(new File("filepath")); 
     ArrayList<Integer> list = new ArrayList<Integer>(); 
     while (s.hasNext()){ 
      list.add(s.nextInt()); 
      s.nextLine(); // Eat the next line 
      // Remove the conditional if statement to eat the new line 
     } 
     System.out.println(list); 
     s.close(); 
    } 
} 

你必須直接讀取頭移過線,然後hasNext()函數將確定是否有任何新的內容。

0

問題是此塊

while (s.hasNext()){ 
    if(s.hasNextInt()){ 
     list.add(s.nextInt()); 
    } 
} 

你應該爲了做什麼讀取指定的格式是:

while (s.hasNext()){ 
    String line = s.nextLine(); 
    String[] content = line.split(" "); 
    list.add(Integer.parseInt(content[1])); 
} 

希望這有助於。