2017-04-03 125 views
-1

所以我有一个文件,我试图从中解析该行。正是在String.split()用于读取输入文件

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

你可以粘贴代码和堆栈跟踪吗? – AMB

+0

当然没问题 – HahnSolo

回答

0

在你的情况下没有必要对一个正则表达式,你可以做到这一点与

String[] arr = str.split(", "); 

无论如何,你的指令不能ca使用NumberFormatException,因为没有任何数字涉及任何地方。您可能试图将一些结果字符串用作数字,但由于某些不是数字而失败。

编辑

从你的示例代码,有两个问题:

  1. 如已经指出的@AlexanderRomanov,你可以不投180cm了一些,但你必须删除cm第一;
  2. 你在i+1位置i位置和高度,创建一个新的人与名字,所以i = 0的人都会有“名”为name和178 height,但你的for循环i递增,所以下一个迭代将尝试创建一个人name 178和height“别名”。

这里是一个要解决的问题

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); 
} 

注意,对于速度现在是2,所以在第二次迭代从2开始,并考虑“AnotherName”和180

+0

每个人都有一个需要被解析为一个整数的高度,我相信当这些项目没有被正确添加到数组中时,它下面的for循环会在第二个位置上寻找一个数字不是一个。 – HahnSolo

+0

但是你说的不需要正则表达式,这些隐含的指示很奇怪地给了我的老师,这就是为什么我要去那条路线...... – HahnSolo

+0

我明白了,我编辑了我的答案和更多细节 –

0
代码

你不需要正则表达式,但你需要摆脱非数字符号,然后尝试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); 
} 
0

相当困难的,从你在这里提供的信息来确定,我们只能猜测。我需要查看输入文件的至少一部分,以提出如何继续的建议。