我有一个JTextField对象,用户可以在其中键入数字(或任何内容)。我正在尝试解析这个文本字段中的数字,我会进行验证检查以查看该数字是否在一定范围内(1-999)。
String lowerLimit = this.lowerLimitTextField.getText().trim();
String upperLimit = this.upperLimitTextField.getText().trim();
if( Integer.parseInt(lowerLimit) < 1 || Integer.parseInt(upperLimit) > 999 )
{
return "The string must be in the range 0-999";
}
我的问题是,用户可以在文本字段中指定任何值。当我尝试输入类似“61412356123125124”的内容时,解析字符串时会出现NumberFormatException。处理这种情况最简单的方法是什么?我确实有一个检查,以确保输入的字符串是所有数字,所以没关系。
我尝试将parseInt()更改为parseLong()但我仍然遇到同样的问题,因为输入的数字基本上是无限制的。这可以通过解析字符串(首选)来完成,还是在JTextField本身设置一些约束的最简单方法?
答案 0 :(得分:3)
使用NumberFormat
解析
import java.text.NumberFormat;
import java.text.ParseException;
public class MyVisitor {
public static void main(String[] args) throws ParseException {
System.out.println(NumberFormat.getNumberInstance().parse("61412356123125124"));
}
}
输出
61412356123125124
答案 1 :(得分:1)
看起来你不想得到号码,只是检查范围(0-999)。在这种情况下,只需捕获NumberFormatException并返回相同的字符串:
try {
if( Integer.parseInt(lowerLimit) < 1 || Integer.parseInt(upperLimit) > 999 ) {
return "The string must be in the range 0-999";
}
} catch (NumberFormatException e) {
return "The string must be in the range 0-999";
//or more relevant message, like "Number to long" or something
}
答案 2 :(得分:0)
答案是异常是你的朋友:它告诉你数字太大了......把错误处理放在catch块中或者更好地声明抛出NumberFormatException并捕获调用块以便可以调用该方法< / p>
所以你可以使用Integer.parseInt,Long.parseLong或new BigInteger(String)......我建议在这种情况下使用Integer.parseInt。一旦你有一个int,你可以做边界检查。如果超出界限,您可能只想抛出NumberFormatException:)