使用StringTokenizer将文件读取到Java中



我试图做一项非常简单的任务,但没有得到我想要的结果。我有一个文本文件,其中的名称用逗号分隔在多行上,我想将这些信息存储在1D数组中。当我运行代码并尝试打印数组以确保我的信息被记录时,控制台只打印出文本文件的最后一行。我的代码出了什么问题?我试着摆弄它,但我找不到解决问题的办法。信息是否被覆盖?

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

代码在每行的开头将i初始化为0。在跑步开始时这样做。

考虑使用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);       

您正在重新开始计数,并在每行重写names

尝试将names创建为ArrayList

ArrayList<String> names;

在第一个循环外初始化一次,如下所示:

names = new ArrayList<String>();

然后,每次您通常将名称放在数组中时,请替换以下行:

names[i] = myTokens.nextToken();

带有:

names.add(myTokens.nextToken());

相关内容

  • 没有找到相关文章

最新更新