我得到了一个数字格式的

时间:2015-09-20 03:11:07

标签: java

我正在尝试搜索一个文件,一个小文件,输入我输入的字符串,然后只输出该行的双精度值。每次尝试时我都会收到错误。此外,我试图避免使用循环所以它有点挑战(我知道有一个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)

3 个答案:

答案 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;