1

我有来自 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();
 }

我用错了捕手吗?

4

3 回答 3

3

线路没有问题

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

它将返回truefalse。但不会扔任何东西exception

为此,您可以检查mathes方法的布尔值

if(!test1.matches("(d+)(p/)(d+)")
    // show the dialog
于 2013-06-21T06:16:58.877 回答
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);   
}
于 2013-06-21T06:22:59.873 回答
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);   

  }
于 2013-06-21T06:20:06.853 回答