当前位置: 首页 > 知识库问答 >
问题:

在java中使用StringTokenizer时的java.util.NosuChelementException

尉迟越
2023-03-14

我最近在做一个简单的项目文件读,写和比较字符串在核心Java。我使用StringTokenizer解析行中的每个元素。但是在这样做的时候,我遇到了以下错误消息。任何关于这方面的帮助,提前感谢。错误消息:

Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at java.util.StringTokenizer.nextElement(Unknown Source)
at com.dhiraj.demo.ComparatorClass.main(ComparatorClass.java:64)

我的代码就像跟随;

String listtable = "listtable.dat";
    ArrayList<ListTableClass> ltc = new ArrayList<ListTableClass>();

    try(FileInputStream fis = new FileInputStream(listtable);
            BufferedReader bio = new BufferedReader(new InputStreamReader(fis))){
        String line;
        while((line = bio.readLine())!=null){
            System.out.println(line);
            StringTokenizer to = new StringTokenizer(line, "|");
            //while(tokens.hasMoreElements()){
                //System.out.println(tokens.nextElement());

                //Integer id = Integer.parseInt(to.nextElement().toString().trim());
            //  System.out.println(id);
                Integer id = Integer.parseInt(to.nextElement().toString());

                //int id = Integer.parseInt(to.nextElement().toString().trim());
                System.out.println("i am error");
                String fname = to.nextElement().toString().trim();
                String lname = to.nextElement().toString().trim();
                String address = to.nextElement().toString().trim();
                Integer age = Integer.parseInt(to.nextElement().toString().trim());


                ltc.add(new ListTableClass(id, fname, lname, address, age));

            //}
        }
    }catch(IOException e){
        System.out.println(e);

    }       
    for(ListTableClass t: ltc){
        System.out.println(t.getId());
        System.out.println(t.getFname());
        System.out.println(t.getLname());   
        System.out.println(t.getAddress());     
        System.out.println(t.getAge());         

    }

和文件示例为:

11120|bijaya|khanal|biratnagar|25
11121|chandramani|sapkota|hetauda|25
11117|Hari|Sapkota|bhaktapur|25
11118|pramod|chaulagain|banepa|25
11119|bigyan|shrestha|birjung|25
11120|bijaya|khanal|biratnagar|25
11114|suman|hamal|shangrila|25
11115|kishor|Neupane|Sanepa|25

共有1个答案

郤坚诚
2023-03-14

我将首先向ListTableClass添加ToString,类似于

public String toString() {
    return String.format("Id: %d%n" + //
            "Name (lname, fname): %s, %s%n" + //
            "Address: %s%n" + //
            "Age: %d",//
            id, lname, fname, address, age//
            );
}

然后我会选择String.split(String)扫描器并从用户的主文件夹中读取文件,最后编程到list接口(并使用菱形操作符<>),并使用tostring检查emtpy行,如

public static void main(String[] args) {
    String listtable = "listtable.dat";
    List<ListTableClass> ltc = new ArrayList<>();
    File f = new File(System.getProperty("user.home"), listtable);
    try (Scanner s = new Scanner(f)) {
        while (s.hasNextLine()) {
            String line = s.nextLine();
            if (line.trim().isEmpty()) {
                continue;
            }
            System.out.println(line);
            String[] to = line.split("|");
            Integer id = Integer.parseInt(to[0].trim());
            String fname = to[1].trim();
            String lname = to[2].trim();
            String address = to[3].trim();
            Integer age = Integer.parseInt(to[4].trim());
            ltc.add(new ListTableClass(id, fname, lname, address, age));
        }
    } catch (IOException e) {
        System.out.println("Caught Exception: " + e.getMessage());
        e.printStackTrace();
    }
    for (ListTableClass t : ltc) {
        System.out.println(t);
    }
}
 类似资料:
  • 问题内容: Java文档似乎并未提及有关的弃用的任何内容,但我一直很早就听说过它的弃用情况。是因为它具有错误/错误而被弃用,还是整体上更好使用? 我有一些使用的代码,我想知道我是否应该认真考虑将其重构为使用,还是弃用纯粹是为了方便而我的代码是安全的。 问题答案: 从javadoc中获取StringTokenizer: 是旧类,出于兼容性原因保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人改

  • 问题内容: 我正在尝试读取文本文件,并使用Java中的字符串令牌生成器实用程序分别拆分单词。 文本文件如下所示; 现在,我想做的是从文本文件中获取每个字符并将其存储到数组列表中。然后,我尝试最后打印arraylist中的每个元素。 这是我的代码; 我得到的错误消息是这样; 其中“ getWords”是我的Java文件的名称。 谢谢。 问题答案: a)您始终必须先检查。如果没有更多标记可用,则抛出是

  • 但它显示。我如何解决这个问题?

  • 我有以下代码,它将标记字符串以创建对象列表: 我预期的输出是 1#、#Jon#、#176 2#、#Jack#、#200 3#、#Jimmy#、#160 如果我把内部分界线更改为类似的东西,它会正常工作为什么会发生这种行为?

  • 该项目的重点是创建一个排序查询,用户使用GUI界面搜索报告,应用程序输出所有相关数据。 例:报告质量>3处的所有内容 我使用StringTokenizer对象分解字符串并计算每个令牌。第一个令牌必须是report,第二个令牌必须是all,第三个令牌必须是where,第四个令牌必须是quality、basePrice或numInStock,第五个令牌必须是关系运算符(><<=>===)。我们接到指示

  • 问题内容: 我有一个关于代码优化的问题(可以运行,但是太慢了……)。我正在阅读形式的输入 其中Xi,Yi是整数。我用于读取行,然后用于处理这些数字,如下所示: 问题在于,这种方法在处理大型数据集时似乎效率低下。您能否建议我做一些简单的改进(我听说可以使用一些整数分析int或regex)来提高性能?谢谢你的提示 编辑:也许我判断错了,必须在代码的其他地方进行一些改进… 问题答案: (更新的答案) 我