Java - nextInt()大小限制

时间:2014-07-17 01:17:48

标签: java int java.util.scanner

我要求通过输入Scanner class输入一个电话号码,我只是强制执行号码,但我可能会犯这个错误。我需要有一串int,而不是一个int的东西,并且比int的大小容量大。最终,它需要7个整数或10个整数而不是介于两者之间或更多或更少但当然所有数字而不是字母

System.out.println("What is the  phone number (digits only)?: ");
 while (!Main.scan.hasNextInt()) 
            {
                Main.scan.next();
                System.out.println("What is the  phone number (digits only)?: ");
            }

            int phone_number = Main.scan.nextInt();

注释的整数字符串 - 不是意味着整数数组而是一系列独立的整数,但当然如果你指定为一个整数,它就无法区分,所以你必须使用长整数。这就是我所引用的,事实上我的电话号码是一系列的整数而不是一个int这样的原始类型对我来说是正确的一半而且是错误的。

解决方案:感谢Braj !!

    String numbers = Main.scan.next();
        long phone_number = 0 ;

         while (!numbers.matches("(\\d{7}|\\d{10})$"))
         {


             System.out.println("What is the patient's phone number (digits only)?: ");
             numbers = Main.scan.next();
         } 

         phone_number = Long.valueOf(numbers);

2 个答案:

答案 0 :(得分:5)

电话号码不是整数:987-555-1212不代表数字90亿,八亿七千五百万,五十五万一千二百十二。它只是一串数字。

当您进入分机号码和特殊拨号代码等电话号码时,电话号码也可能很长(很多位数),甚至可以包含“#”和“*”等符号。

我将电话号码存储为字符串,并使用代码检查用户输入中是否包含无效字符。

答案 1 :(得分:0)

首先2147483647int的最大值,因此要容纳比此数字大10位数的数字,您需要long

您可以接受字符串,并可以使用正则表达式验证字符串。

阅读A comprehensive regex for phone number validation

示例代码:

String regex = // get the pattern from the above link
String numbers = scanner.next();
if (numbers.matches(regex) {
    System.out.println("valid");
} else {
    System.out.println("Not valid");
}

Downvoter在downvote

之前首先阅读OP的要求

根据OP问题

  

它需要7个整数或10个英寸而不是介于两者之间或更多或更少,但当然所有数字而不是字母。

根据OP评论

  

我只想要一种方法来验证一个字符串,该字符串是10位或7位长的所有数字。

这是DEMO

示例代码:

String numbers = scanner.next();
if (numbers.matches("(\\d{7}|\\d{10})$")) {
    int mobile = Integer.valueOf(numbers);
    System.out.println("valid");
} else {
    System.out.println("Not valid");
}