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

时间:2017-09-24 06:35:23

标签: java string integer

我必须做一个验证,其中提到电话号码应该是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位数字串设置为整数。

先谢谢!!!!

2 个答案:

答案 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_VALUE9,223,372,036,854,775,807,它可以满足您的目的。因此,而不是Integer使用Long

注意OP:正如许多人所指出的那样,您可能需要检查您的代码逻辑,以考虑稍后可能遇到的各种情况。请仔细阅读一次评论。