2016-02-28 36 views
0

我有以下行:StringTokenizer的問題

1675 | 29/02/2016 | Jane Smith | James C | James C | 4 | 3 

這裏是我的字符串標記代碼:

StringTokenizer stringTokenizer = new StringTokenizer(line, " | "); 
int cId = Integer.parseInt(stringTokenizer.nextElement().toString()); 
String cDate = stringTokenizer.nextElement().toString(); 
String cName1 = stringTokenizer.nextElement().toString(); 
String cName2 = stringTokenizer.nextElement().toString(); 
String cName3 = stringTokenizer.nextElement().toString(); 
String cName4 = stringTokenizer.nextElement().toString(); 
String wName = stringTokenizer.nextElement().toString(); 
String wName2 = stringTokenizer.nextElement().toString(); 
String cScore1 = stringTokenizer.nextElement().toString(); 
String cScore2 = stringTokenizer.nextElement().toString(); 

不過,我不斷收到沒有這樣的元素例外。我的代碼有什麼問題?

+3

我無法重現您的問題:https://ideone.com/PtxgbP。你確定這是你的線包含的? – Pshemo

+2

錯誤的第一件事是:您正在使用StringTokenizer。它是幾個Java版本的遺留類,不應該用於任何新代碼。引用StringTokenizer api:「StringTokenizer是一個遺留類,爲了兼容性的原因保留下來,儘管它在新代碼中的使用不受歡迎。建議任何尋求該功能的人都使用String或java.util.regex包的拆分方法「。 – Stultuske

+2

相關的,來自[StringTokenizer'的文檔](https://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html):「_StringTokenizer是保留的遺留類兼容性的原因,儘管它在新代碼中的使用不受歡迎。「如果Oracle甚至告訴你不要使用它,那麼不要...... –

回答

1

試試這個:

String line = "1675 | 29/02/2016 | Jane Smith | James C | James C | 4 | 3"; 
String parts[] = line.split(Pattern.quote(" | ")); 

結果是字符串parts[0] .. parts[5]數組

檢查出來與輸出System.out.println(Arrays.toString(parts));

[1675, 29/02/2016, Jane Smith, James C, James C, 4, 3] 
0

爲什麼你正在使用StringTokenizer類你爲什麼不使用split();String類的方法。

String abc ="your | string | should | be | here "; 
String[] strArr = abc.split(" | "); 
/// loop on strArr to get your tokens.