2015-03-02 34 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);