这是我编写的代码,用于从文本框中获取文本,将它们解析为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");
}
}
...............
答案 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)
为避免在解析字符串以获取数字时处理异常(或在您的情况下为双数),您可以将NumberFormat与ParsePosition结合使用,如下所示:
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。