我的应用程序将从最终用户获取数字作为字符串。如果数字不是数字,我必须通过说提供数字来抛出错误消息。我可以通过使用NumberFormatException来解决这个问题。另一种情况是,用户输入的值大于Long.MAX值。我如何检查这种情况并向用户提供错误消息以输入小于Long.MAX值的数字?我不应该使用任何第三方或开源库来解决此问题。即使他们提供解决方案,他们如何解决它?
答案 0 :(得分:4)
用户Running: rake assets:precompile
I, [2016-03-22T05:59:25.096354 #366] INFO -- : Writing /tmp/build_3e31f1bb8b828cb787890706e9ec589b/public/assets/FontAwesome-0d34da07e5cbcb4ff087b397966a9f9ffb4d6ed7c7060568565203c02f3fee11.otf
I, [2016-03-22T05:59:25.099701 #366] INFO -- : Writing /tmp/build_3e31f1bb8b828cb787890706e9ec589b/public/assets/fontawesome-webfont-e511891d3e01b0b27aed51a219ced5119e2c3d0460465af8242e9bff4cb61b77.eot
解析用户输入并将结果与Long.MAX_VALUE进行比较
rake aborted!
Sass::SyntaxError: Invalid CSS after "...orm-group::not(": expected pseudo_expr, was ":first-child)"
(sass):9108
答案 1 :(得分:1)
如果输入的数字大于Long.MAX
值,那么接下来你会做什么。它会导致错误,因为您不知道在哪里存储它。
更好的方法是在用户输入的范围内检查是否在范围内。如果大于Long.MAX
,请将其存储在BigInteger
答案 2 :(得分:1)
使用BigInteger
和longValueExact()
方法,并捕获例外:
public static void main(String[] args) {
test("123");
test("9223372036854775807"); // Long.MAX_VALUE
test("-9223372036854775808"); // Long.MIN_VALUE
test("9223372036854775808"); // Long.MAX_VALUE + 1
test("-9223372036854775809"); // Long.MIN_VALUE - 1
test("abc");
}
private static void test(String input) {
long longVal;
try {
longVal = new BigInteger(input).longValueExact();
} catch (NumberFormatException e) {
System.out.println("Value is not a valid integer number: " + input);
return;
} catch (ArithmeticException e) {
System.out.println("Value exceeds range of long: " + input);
return;
}
System.out.println("Got valid long value: " + longVal);
}
<强>输出强>
Got valid long value: 123
Got valid long value: 9223372036854775807
Got valid long value: -9223372036854775808
Value exceeds range of long: 9223372036854775808
Value exceeds range of long: -9223372036854775809
Value is not a valid integer number: abc
答案 3 :(得分:0)
您可以使用Long.MAX_VALUE访问最大值,并在if条件下检查用户输入的值。
答案 4 :(得分:0)
这是另一种解决方案,不使用func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
let surl = request.URL?.absoluteString
if surl == "http://myurl/m/include/login.php"{
print("login pressed")
////call login view controller
var dvc = ViewController()
dvc.openNewViewController()
return false
}
return true
}
public func openNewViewController(){
var newController = LoginViewController()
self.presentViewController(newController, animated: true, completion: nil)
}
核心
Java
答案 5 :(得分:0)
将字符串视为BigInteger
并进行比较是最好的方法。但这是另一个只是为了表明通常有不止一种方法来实现某些目标:
public boolean isInRange(String number) {
String maxValue = Long.toString(Long.MAX_VALUE);
number = number.replaceFirst("^0+", ""); // remove leading zeroes
return number.length() < maxValue.length() ||
(number.length() == maxValue.length() &&
number.compareTo(maxValue) <= 0);
}
这假设number
完全由数字组成(无负号)。