我正在尝试搜索一个文件,一个小文件,输入我输入的字符串,然后只输出该行的双精度值。每次尝试时我都会收到错误。此外,我试图避免使用循环所以它有点挑战(我知道有一个while循环,但我会处理下一个..任何帮助将不胜感激。哦是的和文本文件看起来像这样(这两个顶级股票自动收报机)。
AAPL 101.50
MSFT 45.84
File file = new File("stocks.txt");
Scanner ticker = new Scanner(System.in);
Scanner scan = new Scanner(file);
String phone;
System.out.print("\nEnter a stock ticker: ");
String that = ticker.next();
while(scan.hasNext())
{
phone = scan.nextLine();
//double b = Double.parseDouble(phone);
if(phone.contains(that))
System.out.println(phone + "\n");
}
one of the errors is:
Enter a stock ticker: AAPL
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextDouble(Scanner.java:2413)
at hw01a.java.Hw01aJava.main(Hw01aJava.java:36)
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)
the other is:
Enter a stock ticker: AAPL
Exception in thread "main" java.lang.NumberFormatException: For input string: "AAPL 101.50"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at hw01a.java.Hw01aJava.main(Hw01aJava.java:34)
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)
答案 0 :(得分:1)
如果您在Double.parseDouble(phone)
(例如)phone
时尝试致电"AAPL 101.23"
,那将会失败。 parseDouble
方法期望整个参数字符串是有效的double。你的字符串在开头就有不是数字的东西。因此例外......
如何处理?
你需要以某种方式跳过非数字的东西:
String.split(...)
将该行“解析”为组件/字段。Scanner
来阅读字段,而不是阅读整行。答案 1 :(得分:0)
您可以使用子字符串提取双号:
// will extract 101.23 from "AAPL 101.23"
System.out.println(phone.substring(phone.indexOf(' ') + 1) + "\n");
答案 2 :(得分:0)
您正在尝试将字符串转换为不是数字的double。该字符串也包含股票代码。你可以做的是这样的事情:
getElementById('').innerHTML;