2013-11-22 24 views
0

我有一個包含1302行的.txt文件,它均勻地分割爲14 x 93(對應於14列和93行)。我想將1302行解析爲[93][14]多維數組。我有以下腳本遍歷每個單獨的「單元格」,但對於文件解析,我有一些問題。將.txt文件的每行分配給多維數組中的單元格

 int rows = 93; 
     int columns = 14; 
     int i; 
     int j; 
     int count = 0; 

     String[][] array = new String[rows][columns]; 
     for(i = 0; i < rows; i++){ 
      for(j = 0; j < columns; j++){ 
       System.out.println(i + "," + j); 
       count++; 
      } 
     } 

如何將文本文件的每個「行」分配到每個單元格中?

回答

1

我的建議(除了使用double[][]喜歡的東西List<List<Double>>改變)將要經過的每個文本行這樣:

InputStream fis; 
BufferedReader br; 
String   line; 

fis = new FileInputStream("the_file_name"); 
br = new BufferedReader(new InputStreamReader(fis, Charset.forName("UTF-8"))); 
while ((line = br.readLine()) != null) { 
    // Deal with the line 
} 

// Done with the file 
br.close(); 
br = null; 
fis = null; 

有了這個,你應該能夠得到的每一個人「行」文件。我之前提到的使用List<List<Double>>而不是double[][]的原因是因爲你得到了兩件事:

1)動態調整大小。即使你知道這個尺寸,並且想給這個列表一個默認的大小來幫助提高性能,你也不會受限於這個尺寸,這是值得的。程序員黃金。

2)使用原始double(小寫d)而不是Java對象Double(大寫D)真的會殺死你,只要不能訪問Double(capitol D對象)中內建的很多方法和可用性, 。關於這方面的更多解釋,請參閱:Double vs. double

另請注意,上面的代碼沒有錯誤檢查,因此您需要在其中構建一些代碼,這是一個非常基本的實現。

編輯::

好了,所以在你的代碼,你張貼在:code snipped你有readLine()循環的雙fo​​r循環的內部。像這樣:

while ((line = br.readLine()) != null) { 
    for (int i = 0; i < rows; i++){ 
     for(int j = 0; j< columns; j++){ 
      line = array[i][j]; 
     } 
    } 
} 

現在,有兩個問題:

1)要設置LINE等於陣列的內容[i] [j],這意味着任何操作,因爲陣列僅僅是一個空的二維數組。

2)在你的循環1302次的文本文件(然後多一些,因爲你正在做的(1302 *列)*每行1302

難道就是上面這段代碼,是需要照顧。你的「行」循環的所以不是你在做什麼,只是做:

int i = 0; 
while ((line = br.readLine()) != null) { 
    array[i][0] = line; 
    i++ 
} 

,將填補了所有該文件中的字符串您的數組。

+0

我已經實現了一些基本的錯誤檢查。我做的是我把我的多維數組遍歷到你的while循環中,賦值爲'line = array [i] [j]'。這會起作用嗎? – theGreenCabbage

+0

那麼用br.readLine()得到的每一行都是一個字符串,所以你會遇到一些類型不匹配的情況,你需要做的就是在你使用'split (「\\ s +」)',然後使用Double.parseDouble()來標記每行,然後可以將這些單獨的標記放入雙精度數組中。 – WillBD

+0

我已經將我的數組類型更改爲一個'String'來對付那個= P。我不知道爲什麼我最初做出的決定是雙倍的,因爲這些價值在起步時並不是雙倍的。 – theGreenCabbage

0

ScannerBufferedReader在行(行)中讀取,然後使用split("\\s+");將行分割爲標記(列)。然後在每個標記上使用Double.parseDouble(),然後將其插入到數組中。

0

爲了什麼分配到一個二維矩陣,你可以做這樣的事情:

for (int r=0; r<NUM_ROWS; r++) 
    for (int c=0; c<NUM_COLS; c++) 
     matrix[r][c] = get_line(r*NUM_COLS + c) 

get_line(i)將獲得該文件中第i行

相關問題