当前位置: 首页 > 面试题库 >

在多行文本文件上使用StringTokenizer时出错

陶璞
2023-03-14
问题内容

我正在尝试读取文本文件,并使用Java中的字符串令牌生成器实用程序分别拆分单词。

文本文件如下所示;

a 2000

4  
b 3000  
c 4000  
d 5000

现在,我想做的是从文本文件中获取每个字符并将其存储到数组列表中。然后,我尝试最后打印arraylist中的每个元素。

这是我的代码

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;

public static void main(String[] args) {

    String fileSpecified = args[0];

    fileSpecified = fileSpecified.concat(".txt");
    String line;
    System.out.println ("file Specified = " + fileSpecified);

    ArrayList <String> words = new ArrayList<String> ();


    try {
        FileReader fr = new FileReader (fileSpecified);
        BufferedReader br = new BufferedReader (fr);
        line = br.readLine();

        StringTokenizer token;
        while ((line  = br.readLine()) != null) {
            token = new StringTokenizer (line);
            words.add(token.nextToken());
        }
    } catch (IOException e) {
        System.out.println (e.getMessage());
    }

    for (int i = 0; i < words.size(); i++) {
        System.out.println ("words = " + words.get(i));
    }



}

我得到的错误消息是这样;

Exception in thread "main" java.util.NoSuchElementException   
                at java.util.StringTokenizer.nextToken<Unknown Source>  
                at getWords.main<getWords.java:32>

其中“ getWords”是我的Java文件的名称。

谢谢。


问题答案:

a)您始终必须先检查StringTokenizer.hasMoreTokens()NoSuchElementException如果没有更多标记可用,则抛出是已记录的行为:

token = new StringTokenizer (line);
while(token.hasMoreTokens())
    words.add(token.nextToken());

b)请勿为每一行创建一个新的令牌生成器,除非您的文件太大而无法容纳到内存中。将整个文件读取为一个字符串,并让分词器对此进行处理



 类似资料:
  • 问题内容: 此功能无效,并引发错误。我是否需要更改任何参数或参数? 问题答案: 如果文件不存在,将失败。 您可以使用,如果该文件不存在,则会创建该文件,但是它将截断现有文件。 另外,您可以使用; 如果该文件不存在,则会创建该文件,但不会截断现有文件。

  • 我有多个文本文件,大约有100,000行,我想将它们拆分成每个5000行的较小文本文件。 我曾经: 这将创建文件: 没有扩展名的文件。我只是想给他们打个类似的电话: 或者,如果这不可能,我只希望他们有“.txt”扩展名。

  • 我想上传一个图像文件。当我调用我的API上传文件使用postman,得到的错误,如. 我无法将此文件发布到我的Laravel控制器。如何在Laravel中发布文件。有人能帮我解决这个问题吗? 这是我的控制器功能, 在这一行

  • 问题内容: 我需要处理分散在各个目录中的多个文件。我想将所有这些加载到单个RDD中,然后在其上执行map / reduce。我看到SparkContext能够使用通配符从单个目录加载多个文件。我不确定如何从多个文件夹加载文件。 以下代码段失败: 这在第三个循环中失败,并显示以下错误消息: 鉴于我仅提供了两个参数,所以这很奇怪。任何指针表示赞赏。 问题答案: 措辞如何呢? 在Scala中,有两种变体

  • 我尝试使用以下命令编译2个jar文件和4个java源文件: javac-classpath junit-4.12.jar jar2.jar 1.java 2.java 3.java 4.java 但是,我得到以下错误:

  • 如何从输出到多个文件? 每个条目中的关键字是文件名。groupByKey转换给了我,但是我如何将它们写入多个文件呢? 例如,给定以下输入 我想输出两个文件