我在一个类中创建了一个方法,该类应该用以下格式解析文件: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)
答案 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)
希望这能帮助你们所有人:)