2014-04-22 70 views
0
1 
    0 
    0 
    0 
    1 
    1 
    1 

有一個文本文件必須逐行讀取到數組中的代碼中,但它只能停在第一行。正如它獲得的第ineger「1」,不按線按行逐行讀取,在java中輸入數組

String fileName = "input.txt"; 
File file = new File(fileName); 
Scanner scanner = new Scanner(file); 
// String s = ""; 
while(scanner.hasNextLine()){ 
    data1 = scanner.nextLine(); 
} 


for (int i = 0; i < data1.length(); i++) 
{ 
    covertDataArray[i] = Byte.parseByte(data1.substring(i, i+1)); 
} 
+3

data1每次都丟失數值 –

+0

我看到的是您的代碼一直讀到最後一個元素也是1.您必須使用數組來存儲數據。 – TeamIncredibles

+0

是的,你覆蓋每行數據1的值,所以你實際上只得到最後一個整數,而不是第一個。 – NWard

回答

3

讓我們來看看代碼。

while(scanner.hasNextLine()){ 
     data1 = scanner.nextLine(); 
    } 

data1將始終只包含您讀取的最新行的內容。

要解決,只需追加到變量,而不是:

while(scanner.hasNextLine()){ 
     data1 += scanner.nextLine(); 
    } 
+0

即使要追加,他也必須使用緩衝字符串,對吧? – TeamIncredibles

+0

是的,這是它,細節smh ...細節 –

+0

如果文件很長,這段代碼將每次創建X字符串,使用StringBuilder。 –

0

這可能是獲取到整數的其餘部分,線路由於這樣的事實,「數據」是不是數組。它所做的是每次迭代while循環時重寫對象數據。

我會建議使Data和ArrayList(因爲它是一個靈活的數組),並使用它來存儲數據。

這裏是什麼樣的代碼可能是一個樣本:

ArrayList<Integer> data1 = new ArrayList<>; 
while(scanner.hasNextLine()){ 
    data1.addObject(scanner.nextLine()); 
} 

如果使用這種方法,就沒有必要來分析各個整數,這將提高你的程序的性能。

1

您隨時更換的data1的內容,在while循環使用:

data1 += scanner.nextLine(); 
1

這就行了:

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

public class LineByLine { 

    public static void main(String[] args) throws FileNotFoundException { 
     String fileName = "input.txt"; 
     File file = new File(fileName); 
     Scanner scanner = new Scanner(file); 

     int len = 0; 
     int [] covertDataArray = new int[100]; 
     while (scanner.hasNextLine()) { 
      String data1 = scanner.nextLine(); 
      covertDataArray[len] = Integer.parseInt(data1.trim()); 
      len++; 
     } 

     for (int i = 0; i < len; i++) { 
      System.out.println(covertDataArray[i]); 
     } 
    } 

}