鉴于Java没有可为null的类型,也没有TryParse(),如何处理输入验证而不会引发异常?
通常的方式:
String userdata = /*value from gui*/
int val;
try
{
val = Integer.parseInt(userdata);
}
catch (NumberFormatException nfe)
{
// bad data - set to sentinel
val = Integer.MIN_VALUE;
}
我可以使用正则表达式来检查它是否可解析,但这似乎也有很多开销。
处理这种情况的最佳实践是什么?
编辑:理由:关于SO的异常处理已有很多讨论,并且一般的态度是,异常应仅用于意外情况。但是,我认为不良的用户输入是预期的,并非罕见。是的,这确实是一个学术观点。
进一步编辑:
一些答案恰好说明了SO的问题所在。您将忽略所问的问题,然后回答另一个与之无关的问题。问题不在于层之间的过渡。问题不是要问如果数字不可解析该返回什么。就您所知,val
= Integer.MIN_VALUE; 对于完全依赖上下文的代码段而言,这是应用程序的正确选择。
差不多就可以了,尽管返回MIN_VALUE有点可疑,除非您确定将其用作错误代码是正确的选择。不过,至少我会记录错误代码的行为。
记录错误的输入(可能取决于应用程序)也可能很有用,以便您可以进行跟踪。
问题内容: 我正在尝试将url参数传递给这样的django模板… 这是我的views.py文件中的调用行。persistConTemplate.html是我的模板的名称,request.GET是包含url参数的字典。 在模板中,我尝试使用像这样的参数之一… numItems是我在请求中这样发送的url参数之一… 当我尝试上面的for循环时,我得到这样的输出。 我期待并希望看到字图像印刷12次… 谁
我有一个12个月温度的文本文件。但是当我试图找到平均温度时,我得到的错误是“String conly be converty to int”(字符串不能转换为int temp[counter]=sc.nextline(); 有人能说出怎么了吗?
注意:这个问题包含不建议使用的前1.0代码!不过,答案是正确的。 要在Rust中将转换为,我可以执行以下操作: 我知道如何将转换为的唯一方法是获取其中的一个片段,然后像这样使用: 有没有办法直接将转换为?
所以我尝试将int转换为string,然后再转换为charAt(0)、charAt(1)和charAt(2)。我这样做是为了把3位数的整数拆分成3个不同的整数。然后我想把这些整数转换成字符串。 我想做的是从101及以上的数字中提取并用文字打印出来。我有数百种、十种和一种方法。我试着把第一个整数应用到百分法,第二个整数应用到十分法,第三个整数应用到一分法。 这是一种 现在我正试着打印单词,我发现了3
我正在尝试如何在Swift中将转换为。 我想出了一个变通方法,使用但是我想知道如何在Swift中完成这一切。