2017-04-03 128 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

相當困難的,從你在這裏提供的信息來確定,我們只能猜測。我需要查看輸入文件的至少一部分,以提出如何繼續的建議。