输入String的NumberFormatException,混淆为什么?

时间:2014-11-09 05:27:57

标签: java string-parsing

我在一个类中创建了一个方法,该类应该用以下格式解析文件:name,xxx-xxx-xxxx 每一行。我试图获取电话号码并将每个数字放入一个int数组并返回该数组。这是我的代码。

这是导致错误的行---

theIntNumber=Integer.parseInt(justAnotherString);

如果我有:Nicholas James,912-345-6789

然后...

justAnotherString =" 9123456789"并且在尝试为int解析该字符串时会引发错误。我很困惑为什么会发生这种情况,不应该从这个字符串解析int吗?

感谢您的回答。

public int[] getPhoneNumberArray() throws FileNotFoundException
{
    Scanner scan = new Scanner(file);
    while(scan.hasNextLine())
    {
        String thePhoneNumber = "";
        String justAnotherString = "";
        int theIntNumber=0;
        String line = scan.nextLine();
        Scanner parser = new Scanner(line);
        parser.useDelimiter(",");
        parser.next();
        parser.useDelimiter(" ");
        parser.next();
        thePhoneNumber = parser.next();
        Scanner lol = new Scanner(thePhoneNumber);
        lol.useDelimiter("-");
        justAnotherString += lol.next();
        justAnotherString += lol.next();
        justAnotherString += lol.next();
        theIntNumber=Integer.parseInt(justAnotherString);

        for(int i=10;i>0;i--)
        {
            phoneNumberArray[i-1]=theIntNumber%10;
        }
    }
    for(int a=0;a<10;a++)
    {
        System.out.println("Phone Number: ");
    }
    return phoneNumberArray;
}

编辑:之前的数字是123-456-7890。我以前的数字大于java可以处理的21亿。 987-654-3210是一个更好的例子。

这是我遇到的错误。

Exception in thread "main" java.lang.NumberFormatException: For input string: "9876543210"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at exam2.Contact.getPhoneNumberArray(Contact.java:71)
    at exam2.ExamTwoInput.main(ExamTwoInput.java:83)

3 个答案:

答案 0 :(得分:1)

您的代码在这里工作,我看到的唯一问题是您将int数字的数字转换为数组的公式显示有缺陷。您无论如何都不需要int,因为您将其作为justAnotherString。基本上,您可以使用Character.digit(char, int)之类的 -

int[] phoneNumberArray = new int[justAnotherString.length()];
for (int i = 0; i < justAnotherString.length(); i++) {
    phoneNumberArray[i] = Character.digit(justAnotherString.charAt(i), 10);
}
System.out.println(Arrays.toString(phoneNumberArray));

当然,你也可以用

之类的东西解析电话号码
String line = "Nicholas James, 123-456-7890";
// get everything after the last space.
String phone = line.substring(line.lastIndexOf(' ') + 1);
phone = phone.replace("-", ""); // remove the '-' symbols
int[] phoneNumberArray = new int[phone.length()];
for (int i = 0; i < phone.length(); i++) {
    phoneNumberArray[i] = Character.digit(phone.charAt(i), 10);
}
System.out.println(Arrays.toString(phoneNumberArray));

的优点是它可以使用(和不使用)破折号。

答案 1 :(得分:1)

另外,您不能将电话号码存储在整数中。它失去了前导零和加号。

例如,假设你获得了英国首相的号码,+ 44 20 7925 0918.那里的加号表示这是一个国际电话。它将被North American Numbering Plan,中的011或European Telephony Numbering Space中的00替换。您如何将该电话号码表示为int?

答案 2 :(得分:0)

我知道这个问题太老了,但到现在还没有接受答案。

作为你的笔记:

  

编辑:之前的数字是123-456-7890。我以前的数字大于java可以处理的21亿。 987-654-3210是一个更好的例子。

所以,请使用Long.valueOf(str)代替Integer.parseInt(str)Integer.valueOf(str)

希望这能帮助你们所有人:)