2015-05-09 74 views
1

這應該是非常簡單的。當我編寫代碼時,我非常確定它會工作。我想創建一個2維數組的字符串(data [] [])包含data.txt的數據,並且1維數組(kolom [])包含第一行data.txt的列描述。從.txt文件到字符串插入數組的字符串失敗

import java.util.*; 
import java.io.*; 
public class Data { 
private String[][] data; 
private String[] kolom; 
    public Data() throws FileNotFoundException { 
     data = new String[300][4]; 
     kolom = new String[4]; 
     Scanner readLine = new Scanner(new File("data.txt")); 
     Scanner readText = new Scanner(readLine.nextLine()).useDelimiter(";"); 

     for(String element : kolom) 
      element = readText.next(); 

     for(String[] row : data) { 
      readText = new Scanner(readLine.nextLine()).useDelimiter(";"); 
      for(String element : row){ 
       element = readText.next(); 
      } 
     } 
    } 
    public String[] getKolom() { 
     return kolom; 
    } 
    public String[][] getData() { 
     return data; 
    } 
    public static void main (String[] args) throws FileNotFoundException { 
     Data data = new Data(); 
     for(String element : data.getKolom()) 
      System.out.print(element); 
     for(String[] row : data.getData()) 
      for(String element : row) 
       System.out.print(element); 
    } 
} 

該程序輸出全部空值。這意味着字符串沒有插入到數組中。 導致此問題的原因是什麼?

  • data.txt下面的代碼片段(幾行301行)。
  • data.txt與Data.class文件位於同一個文件夾中。
  • 試圖將增強型環路更改爲正常環路仍然是同樣的故障。
  • 這個掃描儀的實現有問題嗎?

的data.txt

Nama;Tanggal;Email;Negara 
Kamal;16/04/15;[email protected];Cook Islands 
Melodie;15/12/23;[email protected];Gibraltar 
Salvador;15/07/01;[email protected];Lesotho 
Garth;14/02/02;[email protected];Namibia 

PS: 'kolom' 是 '列',在我的母語

+1

你不覺得迭代緩衝區很奇怪,您應該嘗試在掃描程序和while循環中使用'hasNext()'。 – 2015-05-09 06:47:06

回答

2

你誤會了每個循環

這裏,並在下一循環

for(String element : kolom) 
      element = readText.next(); 

element do es有相同的內存位置kolom[1],kolom[0] etc所以如果你改變element的值,這並不意味着你改變了數組在特定的索引。所以數組並沒有初始化給你null。

相反,你可以使用while循環

while(readText.hasNext()){ 

    kolom[i++]=scanner.nextLine(); //and so on for other array 
} 
1

看看這個:

kolom
import java.util.*; 
import java.io.*; 
public class Data { 
private String[][] data; 
private String[] kolom; 
    public Data() throws FileNotFoundException { 
     data = new String[300][4]; 
     kolom = new String[4]; 

     Scanner readLine = new Scanner(new File("E:/Data.txt")); 
     Scanner readText = new Scanner(readLine.nextLine()).useDelimiter(";"); 

     int lineNumber = 0; 
     while(readLine.hasNextLine()){ 
      String line = readLine.nextLine(); 
      kolom=line.split(";"); // filling data to kolom array 
      data[lineNumber]=kolom; // filling data to data array 
      lineNumber++; 
     }  


    } 
    public String[] getKolom() { 
     return kolom; 
    } 
    public String[][] getData() { 
     return data; 
    } 
    public static void main (String[] args) throws FileNotFoundException { 
     Data data = new Data(); 
     for(String element : data.getKolom()) 
      System.out.print(" "+element); 

     System.out.println("\n*******data*********"); 
     for(String[] row : data.getData()) { 
      for(String element : row) 
       System.out.print(" "+element); 
      System.out.println(); 
     } 
    } 
} 

問題與您的代碼是你沒有填寫數據data