我必须做一个验证,其中提到电话号码应该是10位数字,如9867610012,如果真的我必须在一个setter方法中设置它的值,其参数是一个整数,我不能改变它的参数。众所周知,Integer的最小值为-2,147,483,648,最大值为2,147,483,647(含)。当我使用Integer.parseInt(“9867610012”)将String解析为Integer时,我在运行时遇到异常:
Exception in thread "main" java.lang.NumberFormatException: For input string: "9867610012".
您能否建议我将10位数字串设置为整数。
先谢谢!!!!
答案 0 :(得分:1)
正如我评论的那样,您应该将其保留为String
,然后使用regex
进行验证。
在你的情况下,我将给出一个例子(10位数,可以从零开始)。不要以为我的代码会很完美 - 这只是为了给你一个想法。
boolean isValid = false;
do {
Scanner phoneSc = new Scanner(System.in);
String phone = phoneSc.next();
isValid = isPhoneValid(phone);
} while (!isValid);
public boolean isPhoneValid(String phone) {
String regex = "\\d{10}"; //regex for 10 digits
return phone.matches(regex);
}
如果您不了解正则表达式,请了解它们。它们非常有用。如果您不想学习,则网络已满examples。您可以在前面添加正则表达式+
,(
和)
,可能会有一些短划线-
导致某些数字出现。正则表达式非常适合这样的任务。
答案 1 :(得分:0)
使用parseLong()
。
public static long parseLong(String s) 抛出NumberFormatException
将字符串参数解析为带符号的十进制长度。字符串中的字符必须 所有都是十进制数字,但第一个字符可能是ASCII 减号' - ' (\ u002D')表示负值或ASCII加号 签署' +' (' \ u002B')表示正值。
参数: s - 包含长表示的String 解析
返回:由十进制参数表示的long。
抛出: NumberFormatException - 如果字符串不包含 可解析的。
由于Long.MAX_VALUE
是9,223,372,036,854,775,807
,它可以满足您的目的。因此,而不是Integer
使用Long
。
注意OP:正如许多人所指出的那样,您可能需要检查您的代码逻辑,以考虑稍后可能遇到的各种情况。请仔细阅读一次评论。