Java 如果用户要输入货币符号,请让JOptionPane/parse忽略货币符号

Java 如果用户要输入货币符号,请让JOptionPane/parse忽略货币符号,java,swing,input,joptionpane,Java,Swing,Input,Joptionpane,我目前是一个初级Java课程的学生,我们的教授让我们制作一个金融计算器。无论如何,我想比我已经知道的提前一步,这样,如果用户在输入对话框中输入我要求他们输入的值之前输入$sign,它就不会抛出整个程序。目前,如果我输入一个10甚至10.00的值,我的程序不会介意。但是一个典型的用户可能会输入$10.00 我相信它抛出程序的原因是因为我在输入一个字符串来表示它之后解析了double。我不相信我能解析货币符号。你可能会注意到在我的资料中,我输入了一个货币包,但我真的不知道如何实现它 我的代码。。。。

我目前是一个初级Java课程的学生,我们的教授让我们制作一个金融计算器。无论如何,我想比我已经知道的提前一步,这样,如果用户在输入对话框中输入我要求他们输入的值之前输入$sign,它就不会抛出整个程序。目前,如果我输入一个10甚至10.00的值,我的程序不会介意。但是一个典型的用户可能会输入$10.00

我相信它抛出程序的原因是因为我在输入一个字符串来表示它之后解析了double。我不相信我能解析货币符号。你可能会注意到在我的资料中,我输入了一个货币包,但我真的不知道如何实现它

我的代码。。。。到目前为止:

  import javax.swing.JOptionPane;
  import java.text.NumberFormat;
  class Program1 {
  public static void main(String[] args) {

  String WageInput = JOptionPane.showInputDialog("Enter the numeral representing your     hourly wage");
  double HourlyWage = Double.parseDouble(WageInput);
  String HoursInput = JOptionPane.showInputDialog("How many hours do you work a week");
  double HoursAWeek = Double.parseDouble(WageInput);
  
    }
}
我的教授的项目说明,用于注释:

使用
JOptionPane
类,java应用程序应该向用户询问小时工资率、每周工作小时数,然后计算年薪

然后,它应该要求用户输入所需的加薪百分比,并计算假设收到加薪的年薪,并列出起始年薪和年薪与加薪百分比之间的差异


变量名的命名约定不正确;你应该用骆驼皮。除此之外,您可以检查输入是否以$开头,如果以$开头,您可以对其进行修剪:

    final String wageInput = JOptionPane.showInputDialog("Enter the numeral representing your     hourly wage");
    final double wage = Double.parseDouble(wageInput.startsWith("$") ? wageInput.substring(1) : wageInput);

如果您想要一种强大的方法来解析货币值,可以使用
NumberFormat
执行以下操作:

final String wageInput = JOptionPane.showInputDialog("Enter the numeral representing your hourly wage");

// Prepare a "container" that will be able to parse a currency value in current locale
// (change the `Locale` if needed)
NumberFormat nf_US = NumberFormat.getCurrencyInstance(Locale.US);
try {
    // try to parse a valid currency value for current locale
    final double wage = nf_US.parse(wageInput).doubleValue();
} catch(NumberFormatException nfe) {
    // if it fails to parse --> Invalid currency --> tell the user
    JOptionPane.showMessageDialog(null, "Invalid currency");
}

这基本上迫使输入在程序的当前语言环境中成为有效的货币,Java可以自行决定输入是否有效。

您有一些选择。最重要的一点是,您将无法使用默认选项窗格来完成此操作。您必须提供自己的文本字段,以满足自己的需要

您可以尝试使用
JSpinner
。这有一个很好的特性,即能够解析用户输入,并在输入有效的情况下以您要求的格式返回
对象
(即
double
)。它不会将输入验证为用户类型,因此这仍然允许用户输入他们想要的任何内容,但当您请求值时,该字段将拒绝它

JSpinner currency = new JSpinner();
currency.setModel(new javax.swing.SpinnerNumberModel());
currency.setEditor(new javax.swing.JSpinner.NumberEditor(currency, "00.00"));
JLabel label = new JLabel("Enter the numeral representing your hourly wage");
JPanel panel = new JPanel();
panel.add(label);
panel.add(filteredField);

JOptionPane.showMessageDialog(null, panel, "Hourly Rate", JOptionPane.QUESTION_MESSAGE);

System.out.println("You entered " + currency.getValue());

另一种选择是使用
DocumentFilter
。这样做的好处是在用户输入时进行处理。在对话框关闭后,您仍然需要解析输入,但您至少可以保证可能的格式文本将在


有关更多详细信息,请参见和…

家庭作业问题通常不会在这里得到很多答案。请参考你老师说的。他不会做任何不能做的作业。作为一个线索,思考,思考输入类型是什么,并告诉用户他是否写了其他东西。@Frederik.L是的,尽管我认为值得注意的是,他似乎在努力(无论多么微小)完成他的任务,不像其他人什么都不尝试,只是想要整个代码解决方案。我完全同意你!