所以我有一个文件,我正在尝试解析该行。它的格式为
Name,_178cm,_AnotherName,_180cm,....
下划线表示空格,不在文件中。
现在,我有...(str是我正在解析的行)
String[] arr = str.split(" *,*");
但它给了我一个NumberFormatException
。
我的正则表达式有什么问题?
修改
String[] arr = str.split(" *,*");
Person per;
for (int i = 0; i < arr.length - 1; i++) {
per = new Person(arr[i], Integer.valueOf(arr[i + 1]));
party.add(per);
}
堆栈跟踪:
Exception in thread "main" java.lang.NumberFormatException: For input string: "l"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:580)
at java.lang.Integer.valueOf(Integer.java:766)
at rollercoaster.QueueReader.readQueueFile(QueueReader.java:72)
at rollercoaster.QueueReader.<init>(QueueReader.java:25)
at rollercoaster.ProjectRunner.main(ProjectRunner.java:19)
答案 0 :(得分:0)
在你的情况下,不需要正则表达式,你可以用
来做到这一点String[] arr = str.split(", ");
无论如何,你的指示不能导致NumberFormatException
,因为任何地方都没有涉及数字。您可能会尝试将某些结果字符串用作数字,但由于某些数字不是数字而失败。
修改强>
从您的示例代码中,有两个问题:
180cm
转换为数字,但你必须先删除cm
; i
,高度位置i+1
,因此对于i = 0
,此人将拥有&#34;姓名&#34;作为name
和178作为height
,但您的for循环将i递增1,因此下一次迭代将尝试创建name
178和height
&#34的人;另一个名字&#34;。这里有解决问题的代码
String[] arr = str.split(",");
Person per;
for (int i = 0; i < arr.length - 1; i += 2) {
per = new Person(arr[i], Integer.valueOf(arr[i + 1].replace("cm", "")));
party.add(per);
}
请注意,for pace现在为2,因此第二次迭代将从2开始并考虑&#34; AnotherName&#34;和180.
答案 1 :(得分:0)
您不需要regexp,但在尝试parseInt
令牌之前,您需要摆脱非数字符号。
试试这个:
String[] arr = str.split(",");
for (int i = 0; i < arr.length - 1; i += 2) {
String name = arr[i];
int height = Integer.valueOf(arr[i + 1].replaceAll("\\D+", ""));
Person person = new Person(name, height);
party.add(person);
}
答案 2 :(得分:0)
很难从您在此提供的信息中确定,我们只能猜测。我需要至少看到输入文件的一个片段来提出如何继续的建议。