2017-02-22 62 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));