使用try-catch从Java中捕获来自JTextField的分数的字符串输入

时间:2013-06-21 06:15:10

标签: java string try-catch fractions

我有来自JTextField的字符串输入,它必须是带数字的小数输入,用单个'/'分隔。

当用户输入错误的字符串时,我需要抛出错误;到目前为止,我可以匹配模式,但异常不会被抛出。不知道我做错了什么或者有更简单的方法,(我需要使用try-catch);

public void setInputData(String strFrac1, String strFrac2, String oper)
{
String test1, test2;
test1 = strFrac1;
test2 = strFrac2;

try 
{
test1.matches("(d+)(p/)(d+)");
}
catch (NumberFormatException e) 
{
JOptionPane.showMessageDialog(null, e.getMessage(), "ALERT!", JOptionPane.ERROR_MESSAGE);   
}


String[] fraction2 = strFrac2.split("/");
String[] fraction1 = strFrac1.split("/");


  //This will fill up a single array with the numbers and operators we need to use
  for (int i = 0 ; i <= 1; i++)
  {
    fractions[i] = fraction1[i];
    if (i == 0 || i == 1)
    {
      fractions[i + 2] = fraction2[i];
    }
  }

  fractions[4] = oper;

  return();
 }

我使用了错误的捕手?

3 个答案:

答案 0 :(得分:3)

没有问题
test1.matches("(d+)(p/)(d+)");

它将返回truefalse。但不会抛出任何exception

要执行此操作,您可以检查mathes方法

的布尔值
if(!test1.matches("(d+)(p/)(d+)")
    // show the dialog

答案 1 :(得分:3)

test1.matches("(d+)(p/)(d+)");

将返回一个布尔值

你可以明确地抛出异常

try 
{
if(!test1.matches("(d+)(p/)(d+)"))
     throw new NumberFormatException();
}
catch (NumberFormatException e) 
{
JOptionPane.showMessageDialog(null, e.getMessage(), "ALERT!", JOptionPane.ERROR_MESSAGE);   
}

答案 2 :(得分:2)

如果要在与模式不匹配时抛出异常,则需要显式抛出异常。 matches方法的签名是

public boolean matches(String regex)

这意味着它会返回truefalse

因此,如果您的模式与字符串输入匹配,那么它将返回true,否则它将返回false

要解决您的问题,您可以这样做,

 if(test1.matches("(d+)(p/)(d+)")){
 // domeSomething
 }else {
  throw new NumberFormatException();
 }

如果你不想使用它,你必须使用try-catch, 然后你可以简单地显示MessageDialog如下

 if(test1.matches("(d+)(p/)(d+)")){
  //doSomething
  }else{
       JOptionPane.showMessageDialog(null, e.getMessage(), "ALERT!",   JOptionPane.ERROR_MESSAGE);   

  }