【问题标题】:StringTokenizer says java.util.NoSuchElementExceptionStringTokenizer 说 java.util.NoSuchElementException
【发布时间】:2018-01-27 10:09:29
【问题描述】:

当我使用BufferedReader 类和util 类运行我的代码并使用BufferedReader 类初始化StringTokenizer 之外的变量时,它可以工作,但是当我使用它时它会中断并且我得到java.util.NoSuchElementException 错误我输入了第一个字符串 s(在代码中)。

import java.util.*;

class spamclas
{
public static void main() 
{

    Scanner sc=new Scanner(System.in);
    int a=0,b=0;
    int t=sc.nextInt();
    while(t>0)
    {
        String s=sc.next();
        StringTokenizer st=new StringTokenizer(s);
        while(st.hasMoreTokens())
        {
            a = Integer.parseInt(st.nextToken());
            b = Integer.parseInt(st.nextToken());
        }

        System.out.println("a   b"+a+"   "+b);
        t--;
    }
}
}

【问题讨论】:

  • 你尝试了什么输入?
  • @azro t=3 s =1 1 当我第一次输入 s 的值时,它会中断

标签: java string java.util.scanner stringtokenizer


【解决方案1】:

条件st.hasMoreTokens() 看看接下来是否有至少一个元素,然后你调用st.nextToken() 两次


所以如果只有一个元素,条件将是 true 但第二个 st.nextToken() 会找到任何东西

因为你把1 1sc.next(),你String s将只有1next()的默认分隔符是空格),所以只有一个数字,第二个nextToken()会失败

您最好使用sc.nextLine() 并使用 2 if 检查每个数字:

int t = Integer.parseInt(sc.nextLine());        // nextLine here too to consume return char
while (t > 0) {
  String s = sc.nextLine();
  StringTokenizer st = new StringTokenizer(s);
  a = b = 0;
  if (st.hasMoreTokens()) { a = Integer.parseInt(st.nextToken()); }else{ a=0; }  //line 18
  if (st.hasMoreTokens()) { b = Integer.parseInt(st.nextToken()); }else{ b=0; }  //line 19
  System.out.println("a : " + a + ", b : " + b);
  t--;
}

提示:第 18&19 行可以用三元运算符编写:

a = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;
b = st.hasMoreTokens() ? Integer.parseInt(st.nextToken()) : 0;

【讨论】:

  • 现在,当我运行代码时,程序第一次在循环工作时没有输入,但第二次它要求输入 String,我该怎么做才能解决这个问题?
  • @amethyststan 你有没有像我给的那样更改int t 的 init 行?
【解决方案2】:

首先,别担心

问题是当它到达这条线时。

b = Integer.parseInt(st.nextToken());

它是空的。

因为您将 .nextToken() 放入 a 现在它是空的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 2017-08-23
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多