检查输入的字符串是否为整数

时间:2016-12-11 23:20:59

标签: java

在这个程序中,我想检查输入的数字是否为10位整数移动数字,如果我输入值为0123456789,它的工作正常但是如果我输入像5028608722则失败。程序是正确的但这里有些东西丢失或错误。

打包游戏;

import java.util.Scanner;

class Utility
{
    static boolean numberOrNot(String input)
    {
        try
        {
            int  i=Integer.parseInt(input);
            System.out.println(i);
        }
        catch(NumberFormatException ex)
        {
            return false;
        }
        return true;
    }
}

public class CheckMobileNumber
{
    public static void main(String[] args)
    {
        System.out.println("Enter your mobile number");

        Scanner sc = new Scanner(System.in);

        String input = sc.next();

        if(Utility.numberOrNot(input) && (input.length() == 10))
        {
            System.out.println("Good!!! You have entered valid mobile number");
        }
        else
        {
            System.out.println("Sorry!!!! You have entered invalid mobile number. Try again...");
        }
    }
}

4 个答案:

答案 0 :(得分:1)

尝试使用long(长整数)数据类型而不是int - 我认为你的空间不足:2 ^ 32 = 4,294,967,296。

以下是primitive data types的快速浏览。

答案 1 :(得分:1)

问题的直接原因是32位int类型不足以容纳所有10位整数。

您最好使用正则表达式执行此任务。从技术上讲,电话号码不是整数,在这种情况下它们看起来就像整数。最好不要将它们作为整数存储在软件中。有一天,您可能需要处理电话号码中的非数字字符。

    Pattern phoneNumberPattern = Pattern.compile("\\d{10}");

    if (phoneNumberPattern.matcher("5028608922").matches()) {
        System.out.println("OK, phone number!");
    } else {
        System.out.println("Bad phone number!");
    }

答案 2 :(得分:0)

您的大值(5028608722)无法适应已签名的int。 max signed int是2 ^ 31 - 1 == 2147483647.您使用的数字是5028608722,这个数字太大了。为了使代码正常工作,您需要更改为使用长类型。例如:

import java.util.Scanner;

class Utility
{
    static boolean numberOrNot(String input)
    {
        try
        {
            long  i=Long.parseLong(input);
            System.out.println(i);
        }
        catch(NumberFormatException ex)
        {
            return false;
        }
        return true;
    }
}

public class CheckMobileNumber
{
    public static void main(String[] args)
    {
        System.out.println("Enter your mobile number");

        Scanner sc = new Scanner(System.in);

        String input = sc.next();

        if(Utility.numberOrNot(input) && (input.length() == 10))
        {
            System.out.println("Good!!! You have entered valid mobile number");
        }
        else
        {
            System.out.println("Sorry!!!! You have entered invalid mobile number. Try again...");
        }
    }
}

使用Long.parseLong()的可选解决方案是使用正则表达式来匹配您的号码。例如,像这样的正则表达式对于10位数字将返回true,否则为false:

"0123456789". match("[0-9]{10}")

将返回true。任何非数字值或任何非10位数字值都将返回false。

所以你的代码看起来像:

import java.util.Scanner;

class Utility
{
  static boolean numberOrNot(String input)
  {
      return input.matches("[0-9]{10}");
  }
}

public class CheckMobileNumber
{
    public static void main(String[] args)
    {
        System.out.println("Enter your mobile number");

        Scanner sc = new Scanner(System.in);

        String input = sc.next();

        if(Utility.numberOrNot(input))
        {
            System.out.println("Good!!! You have entered valid mobile number");
        }
        else
        {
            System.out.println("Sorry!!!! You have entered invalid mobile number. Try again...");
        }
    }
}

答案 3 :(得分:0)

除了正确的,简单的Java答案:我建议使用lib phonenumber作为电话号码。 github.com/googlei18n/libphonenumber如果您的兴趣不仅仅是学术性的; - )