【发布时间】:2013-11-23 19:49:34
【问题描述】:
晚上好,
我需要从文件中读取一些行,文件是 csv,文件的结构如下:
4,
Mo Farah,30,
Jessica Ennis,27,
我需要读取这些值并将它们放入变量中,这就是我尝试这样做的方式:
while(nextline != null){
StringTokenizer st = new StringTokenizer(nextline,",");
int size = Integer.parseInt(st.nextToken());
System.out.println(size);
nextline = reader.readLine();
StringTokenizer st2 = new StringTokenizer(nextline, ","); //why???
String name = st2.nextToken();
System.out.println(name);
int age = Integer.parseInt(st2.nextToken());
System.out.println(age);
第一个 int (4) 读得很好,但是如果我想移到下一行,它会抛出 noSuchElementException,所以我必须在“//why???”旁边写下一行为了移动到下一行,每次我想移动到下一行时,我真的必须实例化一个新的标记器吗?还是有更好的方法?
非常感谢
【问题讨论】:
-
是的,您需要为每一行创建一个新的分词器(或使用新行重置现有的分词器),因为分词器包含与正在处理的行相关联的状态。
-
哇,好浪费,能请教一下如何重置令牌吗?并将其添加为答案?谢谢
-
不要使用 StringTokenizer -- 改用
String#split,正如 @Mark 建议的那样(尽管他的代码有一些问题)。 -
实际上在 Java 中创建对象非常快。如果您来自 C++,这可能看起来像是一种浪费,但实际上它一点也不浪费。该语言旨在像这样使用。刚看了java doc,没有reset功能,新建一个tokenizer就好了。
标签: java bufferedreader stringtokenizer