是否有任何简短而更好的方法将字符串解析为Double并处理异常?

时间:2013-06-03 07:12:38

标签: java

这是我编写的代码,用于从文本框中获取文本,将它们解析为double数据类型,然后打印其产品。那么,是否有任何替代方法可以解析字符串,并将其处理的异常加倍。?

...........
    public void actionPerformed(ActionEvent ae){
        try{
            if(ae.getSource()==b1 || ae.getSource()==t2){
                String s1=t1.getText();
                String s2=t2.getText();
                double x=Double.parseDouble(s1);
                double y=Double.parseDouble(s2);
                double z=x*y;
                t3.setText(""+z);
            }
            if(ae.getSource()==b2){
                t1.setText(null);
                t2.setText(null);
                t3.setText(null);
                t1.requestFocus(true);
            }
        }catch(NumberFormatException nfe){
            JOptionPane.showMessageDialog(this,"Please Enter Proper Number in the TextFields");
        }
    }
...............

4 个答案:

答案 0 :(得分:0)

在您的情况下,您知道如何处理此类异常。没有其他方法可以为您处理异常。您的代码是正确的,这是大多数程序员所做的。您可以使用JFormattedTextField,但是也不会为您处理例外情况。

答案 1 :(得分:0)

恕我直言,

如果您看到Docs

  

public static double parseDouble(String s)                             抛出NumberFormatException

即使有任何快捷方式,它也会使用上面的方法,而且显然也会抛出相同的异常。

答案 2 :(得分:0)

String s1 = t1.getText();
    try {
        double x = Double.parseDouble(s1);
    } catch (NumberFormatException  ex) {
        JOptionPane.showMessageDialog(this,"Please Enter Proper Number in the t1 TextField");
        return;
    }
    String s2 = t2.getText();

    try {
        double y = Double.parseDouble(s2);
    } catch (NumberFormatException  ex) {
        JOptionPane.showMessageDialog(this,"Please Enter Proper Number in the t2 TextField");
        return;
    }

答案 3 :(得分:0)

为避免在解析字符串以获取数字时处理异常(或在您的情况下为双数),您可以将NumberFormatParsePosition结合使用,如下所示:

import java.text.NumberFormat;
import java.text.ParsePosition;

public class TestClass
{

   public static void main(String[] args)
   {     
      System.out.println("Parse test 10.00 ---> " + parseNumber("10.00"));
      System.out.println("Parse test \"\" ---> " + parseNumber(""));
      System.out.println("Parse test 10 ---> " + parseNumber("10"));
      System.out.println("Parse test shgdfhsaghdga ---> " + parseNumber("shgdfhsaghdga"));
   }

   private static boolean parseNumber(String input)
   {
      NumberFormat fmt = NumberFormat.getInstance();
      ParsePosition pos = new ParsePosition(0);
      fmt.parse(input, pos);
      return input.length() != 0 && (input.length() == pos.getIndex());      
   }

}

<强>输出

Parse test 10.00 ---> true
Parse test "" ---> false
Parse test 10 ---> true
Parse test shgdfhsaghdga ---> false

如果数字是有效字符串,则ParsePosition对象的索引将到达字符串的末尾。否则,它将在第一个无效位置结束。最后一个return语句检查这种情况。您可以使用parseNumber()方法预先验证字符串,然后再将其解析为double。