繁体   English   中英

使用 StringTokenizer 将文件读入 Java

[英]Reading a file into Java using 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

代码在每一行的开头将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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM