2015-03-02 74 views
0

我試圖做一個非常簡單的任務,但我沒有得到我想要的結果。我有一個文本文件的名稱用多個行上的逗號分隔,我想將這些信息存儲在一維數組中。當我運行我的代碼並嘗試打印數組以確保記錄我的信息時,控制檯僅打印出文本文件的最後一行。我的代碼有什麼問題?我嘗試過使用它,但是我找不到解決我的問題的方法。信息是否被覆蓋?輸入的使用StringTokenizer將文件讀入Java使用StringTokenizer

import java.util.*; 

public class Tokens { 
public static TextFileInput myFile; 
public static StringTokenizer myTokens; 
public static String name; 
public static String[] names; 
public static String line; 

public static void main(String[] args) { 

myFile = new TextFileInput("namesofstudents.txt"); 

    while ((line = myFile.readLine())!= null) {  
    int i=0;  

    myTokens = new StringTokenizer(line, ","); 
    names = new String[myTokens.countTokens()]; 

     while (myTokens.hasMoreTokens()){ 
      names[i] = myTokens.nextToken(); 
      i++; 
    }   
    }  

for (int j=0;j<names.length;j++){ 
    System.out.println(names[j]);  
} 


    } 
} 

例如:

Mark, Joe, Bob 
    James, Jacob, Andy, Carl 

輸出:

James 
Jacob 
Andy 
Carl 

回答

0

你重新啓動數和每行改寫names

嘗試創建names作爲ArrayList

ArrayList<String> names; 

一次初始化它的第一個循環是這樣外:

names = new ArrayList<String>(); 

然後每次你通常會把名數組及時更換這行:

names[i] = myTokens.nextToken(); 

帶:

names.add(myTokens.nextToken()); 
+0

謝謝,它終於underst好吧! – user23429 2015-03-02 21:57:30

1

的代碼初始化在每個行的開始i0。在運行開始時做到這一點。

1

考慮使用一個ArrayList使生活更輕鬆......

List<String> names = new ArrayList<>(); 

while ((line = myFile.readLine())!= null) {   

myTokens = new StringTokenizer(line, ",");  

    while (myTokens.hasMoreTokens()){ 
     names.add(myTokens.nextToken()); 
    }   
}  

System.out.println(names);