如何在Java中将10位电话号码解析为整数

如何在Java中将10位电话号码解析为整数,java,string,integer,Java,String,Integer,我必须做一个验证,其中提到电话号码应该是10位数字,比如9867610012,如果它是真的,我必须在setter方法中设置它的值,该方法的参数是整数,我不能更改它的参数。我们知道,Integer的最小值为-2147483648,最大值为2147483647(含)。当我使用Integer.parseInt(“9867610012”)将字符串解析为整数时,我在运行时遇到以下异常: Exception in thread "main" java.lang.NumberFormatException:

我必须做一个验证,其中提到电话号码应该是10位数字,比如9867610012,如果它是真的,我必须在setter方法中设置它的值,该方法的参数是整数,我不能更改它的参数。我们知道,Integer的最小值为-2147483648,最大值为2147483647(含)。当我使用Integer.parseInt(“9867610012”)将字符串解析为整数时,我在运行时遇到以下异常:

Exception in thread "main" java.lang.NumberFormatException: For input string: "9867610012". 
你能给我建议一种方法,把10位数的字符串设为整数吗

提前感谢

使用
parseLong()

公共静态长解析(字符串s) 抛出NumberFormatException

将字符串参数解析为带符号的十进制长度。字符串中的字符必须为空 除第一个字符可能是ASCII字符外,所有字符都是十进制数字 减号'-'(\u002D')表示负值或ASCII加号 符号“+”(“\u002B”)表示正值

参数:s-一个字符串,其中包含要使用的长表示形式 解析

返回:参数以十进制表示的long

抛出:NumberFormatException-如果字符串不包含 帕斯布尔长

由于
Long.MAX_值
9223372036854775807
,因此它可以满足您的需要。因此,不要使用
Integer
而是使用
Long


<强> OP:正如许多人指出的,您可能需要回顾您的代码逻辑来考虑以后可能会遇到的各种场景。请务必检查注释一次。

正如我所评论的,您应该将其保留为
字符串,然后使用验证
在您的情况下,我将给出一个示例(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);
}

如果你不懂正则表达式,就学习它们。它们非常有用。如果你不想学习,网络充满了乐趣。您可以将前面的
+
添加到正则表达式中,
,可能是一些破折号
-
导致一些数字包含它。正则表达式非常适合此类任务。

使用
Long.parseLong()
这是一个非常糟糕的主意。顺便说一句,电话号码永远不应该是整数。如果您有一个0作为前缀(这是很常见的),它将被删除。国际号码以0049123123开头。。。把它解析成一个整数会给你一个断开的号码不要误以为一个电话号码可以表示为int或long。它是一串数字,不是数字。记住,电话号码可以以0开头。为什么?电话号码不是整数。您应该将它们视为指示数据,而不是值。@Henry记住电话号码可以以
+
开头。嘿,伙计。请阅读评论。将电话号码解析为int或long不是一个好主意。评论确实提到了这一点,但目前OP没有提到它们。他的标题提到“如何用Java将10位数的电话号码解析成整数”,甚至他的问题都是针对这一点的。我同意他可能需要重新制定逻辑,以便更好地覆盖案件,但这是他的工作。我只是帮助他解决他的
错误
,并澄清他可以做些什么来避免它。这个答案并没有解决数字中的前导零