我正在使用以下逻辑从字符串中提取双精度值。它在第一个字符串上工作正常,但在第二个字符串上引发异常。引发的异常为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}"
默认情况下,类
next
的Scanner
方法为您提供下一个输入,直到达到空格为止。next
方法将这样获取它:{"Hey",
"he"
"is":
1.0,
"miles"
away}
在这种情况下,您有
1.0,
而不是double
(请注意逗号)。这就是为什么要得到
NoSuchElementException
的原因:您一直在执行st.next()
,但是从未找到double
,因此到达了字符串的末尾,并且Scanner找不到其他元素。