【问题标题】:Java - nextInt() size limitJava - nextInt() 大小限制
【发布时间】:2014-09-07 17:24:52
【问题描述】:

我通过输入 Scanner class 要求提供电话号码,并且我只强制执行数字,但我可能会处理这个错误。我需要有一串整数,而不是一个整数并且大于整数的大小容量。最终,长度必须为 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();

清除整数字符串 - 不是整数数组,而是一系列独立整数,但当然如果你指定为一个整数,它无法区分,所以你必须使用长整数。这就是我要引用的内容,事实上我的电话号码是一系列整数而不是一个整数,所以原始类型对我来说一半对一半错。

解决方案:感谢 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);

【问题讨论】:

  • 如果输入的数字是-9876543怎么办? - 是一个有效的电话“号码”
  • 无效。使其成为简单的美国格式。区号和 7 位数字或仅 7 位数字。
  • 这是一个 digits 的字符串,但是将每个数字存储为单独的 int(使用 4 个字节来保存一个永远不会大于 9 的值)是愚蠢的。
  • “不是指整数数组,而是一系列独立整数” - 您所描述的 定义的数组/聚合数据。对矢量数据使用单独的变量是疯狂的 IMO。
  • 也许这个号码只是一个公司目录运营商,你需要更多的分机号码才能联系到真正的人

标签: java int java.util.scanner


【解决方案1】:

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

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

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

【讨论】:

  • 如果不是因为我已经向 OP 指出了这一点,我会给你 +1 说明“这取决于你以后想用它做什么。通常你会很好只需将其存储为字符串就足够了。”
  • 电话号码也可以包含+和暂停
  • @Wyzard 你会解析字符串并使用正则表达式来验证字符串吗?
  • OP 在帖子中所说的内容。 OP 没有屏蔽电话号码,只是想接受 7 和 10 倍的数字
【解决方案2】:

第一个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");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-25
    • 2019-04-07
    相关资源
    最近更新 更多