我有来自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();
}
我使用了错误的捕手?
答案 0 :(得分:3)
行
没有问题test1.matches("(d+)(p/)(d+)");
它将返回true
或false
。但不会抛出任何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)
这意味着它会返回true
或false
因此,如果您的模式与字符串输入匹配,那么它将返回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);
}