NoSuchElementException

NoSuchElementException

我正在使用以下逻辑从字符串中提取双精度值。它在第一个字符串上工作正常,但在第二个字符串上引发异常。引发的异常为java.util.NoSuchElementException

public class StringHandling {

   public String processString(String string)
   {
        Scanner st = new Scanner(string);
        while (!st.hasNextDouble())
        {
            st.next();
        }
        double value = st.nextDouble();
        return String.valueOf(value);
   }

   public static void main(String[] args)
   {
        String first = "Hey, he is 70.3 miles away.";
        String second = "{\"Hey\", \"he\" \"is\": 1.0, \"miles\" away}";
        StringHandling sh = new StringHandling();
        System.out.println("First Value is "+sh.processString(first));
        System.out.println("Second Value is "+sh.processString(second));
   }
}


我只想知道为什么引发异常。

最佳答案

这就是问题:

"{\"Hey\", \"he\" \"is\": 1.0, \"miles\" away}"


默认情况下,类nextScanner方法为您提供下一个输入,直到达到空格为止。

next方法将这样获取它:

{"Hey",
"he"
"is":
1.0,
"miles"
away}


在这种情况下,您有1.0,而不是double(请注意逗号)。

这就是为什么要得到NoSuchElementException的原因:您一直在执行st.next(),但是从未找到double,因此到达了字符串的末尾,并且Scanner找不到其他元素。

10-08 16:24