2015-09-20 35 views
-1

我想搜索一個文件,一個小的,我輸入的字符串,然後只輸出該行上的double值。每次嘗試某些東西時我都會收到錯誤消息。此外,我試圖避免使用循環,所以它有點具有挑戰性(我知道有一個while循環,但我會處理接下來..任何幫助將不勝感激。哦,是的,文本文件看起來像這樣(這兩個頂級股票。行情)我得到一個numberformatexception

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) 
+1

什麼錯誤,你會得到什麼線? –

+0

當我嘗試打印出手機的值時,我只出現錯誤。 – Andrew

+3

向我們顯示異常消息。整個東西。恰恰。 –

回答

0

您可以通過使用子提取雙號:

// will extract 101.23 from "AAPL 101.23" 
System.out.println(phone.substring(phone.indexOf(' ') + 1) + "\n"); 
1

如果你試圖調用Double.parseDouble(phone)phone是(例如)"AAPL 101.23",那是要失敗的。 parseDouble方法期望整個參數字符串是一個有效的雙。你的字符串哈這些東西在開始時並不是數字。因此,例外...

如何處理?

你需要以某種方式跳過非數字的東西:

  • 你可以「解析」行成使用String.split(...)組件/場。
  • 您可以使用Scanner來讀取字段,而不是閱讀整行。
  • 其他可能的方式太...
0

您嘗試將字符串轉換爲雙這不是一個數字。該字符串也包含股票代碼。你可以做的是這樣的:

while(scan.hasNext()) 
       {  
       phone = scan.nextLine(); 
       String[] phoneContents = phone.split(" "); 
       double b = Double.parseDouble(phoneContents[1]); 
       if(phone.contains(that)) 
       System.out.println(phone + "\n"); 
       } 
相關問題