2017-02-22 70 views
-1

我有以下代碼:如何獲得parseDouble忽略 「%」 - Java的

preferredCustomers[count]=new PreferredCustomer(fileData[1],fileData[2],Integer.parseInt(fileData[0]),Double.parseDouble(fileData[3]),(Double.parseDouble(fileData[4]))); 

將被讀行:

778234米妮165.50 5%

在文本文件中。我的問題是,當我嘗試編譯我的程序,我得到了以下錯誤:

run: 
java.lang.NumberFormatException: For input string: "5%" 
    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 customer.Main.main(Main.java:84) 
BUILD SUCCESSFUL (total time: 0 seconds) 

我不能改變文本文檔的格式,以及相應的類有以下幾點:

public class PreferredCustomer extends Customer { 

    // Member variable discount 
    double discountPercentage; 

    // Default constructor 
    public PreferredCustomer() { 
     super(); 
    } 

    // Parameterized overloaded constructor 
    // Constructor chaining calling parent class constructor 
    public PreferredCustomer(String first_name, String last_name, int guestID, double amountSpent, double discountPercentage) { 
     super(first_name, last_name, guestID, amountSpent); 
     //discountPercentage = discountPercentage.replace("%", ""); 
     this.discountPercentage = discountPercentage; 
     // TODO Auto-generated constructor stub 
    } 

    // Getter and setter 
    public double getDiscountPercentage() { 
     return discountPercentage; 
    } 

    public void setDiscountPercentage(double discountPercentage) { 
     this.discountPercentage = discountPercentage; 
    } 

如何我可以重新編寫代碼來忽略這個「%」符號,這樣它可以讓程序編譯?我在NetBeans中運行,謝謝。

+0

你聽說過['子()'](https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#substring-int-int- )? – Andreas

+0

請勿使用它。使用'java.text.DecimalFormat.parse()'。 – EJP

+0

只需在解析之前關閉'%'即可。 – Carcigenicate

回答

0

在你的代碼,你有

public PreferredCustomer(..., double discountPercentage) { 
    //discountPercentage = discountPercentage.replace("%", ""); 

,但這個時候,爲時已晚,因爲它是期待值是雙

當你調用此構造可以在

例如String上做一個replace

String strVal = fileData[4].replace("%", ""); 
double pc1 = Double.parseDouble(strVal); 
new PreferredCustomer(fileData[1],fileData[2],Integer.parseInt(fileData[0]), 
     Double.parseDouble(fileData[4]),pc1));