【问题标题】:code compiles but i get NoSuchElementException error代码编译但我得到 NoSuchElementException 错误
【发布时间】:2014-09-25 05:24:18
【问题描述】:

该程序假设将人名、性别和拥有该名称的人数和单独的名称放入 String 中,将性别转换为 char,将具有该名称的人数转换为 int。已经计算了有这个名字的人数我只需要将每个人分成正确的类别。 问题是代码可以编译,但出现 NoSuchElementException 错误。

文件如下所示:

约翰,M,416

莎拉,F,414

迈克,M,413

凯特,F,413

    ArrayList<OneName> oneName = new ArrayList<OneName>();
    while(sc.hasNextLine())
    {

    // read a line from the input file via sc into line
        line = sc.nextLine();
        String[] fields =line.split(",");


        StringTokenizer stk = new StringTokenizer(line);
        String name = stk.nextToken();
        char sex = stk.nextToken().charAt(0);
        int count = Integer.parseInt(stk.nextToken());


        OneName list = new OneName(name, sex, count);

        oneName.add(list);      


    }
   String personSex = oneName.get(0).getName();
    System.out.println(personSex);
    }

【问题讨论】:

  • 请您提供您的整个错误日志吗?
  • NameYear 的 java.util.StringTokenizer.nextToken(StringTokenizer.java:349) 的线程“main”java.util.NoSuchElementException 异常。TopNames 的(NameYear.java:44)。主要(TopNames.java:17)

标签: java exception exception-handling stringtokenizer


【解决方案1】:

您必须将分隔符设置为逗号:

StringTokenizer stk = new StringTokenizer(line,",");

它会起作用的。

如果你不设置分隔符,它将设置为\r\n

【讨论】:

    【解决方案2】:

    当你使用StringTokenizer

    StringTokenizer stk = new StringTokenizer("John,M,416"); 
    

    您的文本将由\t\n\r\f 标记。所以stk.nextToken() 会给你John,M,416,如果你再次调用stk.nextToken(),你会得到NoSuchElementException

    例如:

    StringTokenizer stk = new StringTokenizer("John,M,416");
    System.out.println(stk.nextToken());
    System.out.println(stk.nextToken());
    

    输出:

    John,M,416
    Exception in thread "main" java.util.NoSuchElementException...
    

    所以你需要使用你的StringTokenizer如下

    StringTokenizer stk = new StringTokenizer("John,M,416",",");
    while (stk.hasMoreElements()){
       System.out.println(stk.nextToken());
    }
    

    现在你的输出

    John
    M
    416
    

    代码中的错误在哪里?

     StringTokenizer stk = new StringTokenizer(line);
     String name = stk.nextToken(); // this line is ok
     char sex = stk.nextToken().charAt(0); // ohh this one cause the issue   
    

    【讨论】:

      【解决方案3】:

      您需要使用StringTokenizer 传递两个参数,第一个是您的字符串,第二个是需要解析的正则。

       ArrayList<OneName> oneName = new ArrayList<OneName>();
              while(sc.hasNextLine())
          {
      
          // read a line from the input file via sc into line
              line = sc.nextLine();
              String[] fields =line.split(",");
      
      
              StringTokenizer stk = new StringTokenizer(line,",");
              String name = stk.nextToken();
              char sex = stk.nextToken().charAt(0);
              int count = Integer.parseInt(stk.nextToken());
      
      
              OneName list = new OneName(name, sex, count);
      
              oneName.add(list);      
      
      
          }
         String personSex = oneName.get(0).getName();
          System.out.println(personSex);
          }
      

      希望对你有帮助

      【讨论】:

        猜你喜欢
        • 2021-11-15
        • 2016-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-15
        • 2021-11-26
        • 1970-01-01
        相关资源
        最近更新 更多