2016-07-25 81 views
-3
System.out.println("Please input the elements and seperate each by a comma."); 
e = dk.nextLine(); 
String[] elems = new String[e.length()]; 
st = new StringTokenizer(e,","); 

for (int i = 0; i<e.length(); i++) { 
    elems[i] = st.nextToken().toString(); 
} 

for (int i=0; i<e.length(); i++){ 
    System.out.println(elems[i]); 
} 

我試圖打印出數組elems[]但它不會工作的錯誤java.util.NoSuchElementException at java.util.StringTokenizer.nextToken(StringTokenizer.java:349似乎是行:要打印出數組中的Java

elems的[I] = st.nextToken ()的ToString();

你能幫我識別和理解問題嗎?

+1

而這個錯誤是......? –

+0

您是否在foo.bar.baz()處得到類似java.lang.FooException的東西?在bar.foobar()處的foo.bar.qux()'? – dorukayhan

+0

對於初學者,用'st.countTokens()'而不是'e.length()'初始化數組(elems')。 'st.nextToken()。toString()'是多餘的,用'st.nextToken()'代替。循環也必須相應地改變。 –

回答

4

正確的版本:

String[] elems = e.split(","); 
for(String elem : elems) { 
    System.out.println(elem); 
} 

你犯的錯誤是,e.length()返回string(其數量的字符)的大小,所以你最終調用st.nextToken()更多的時間比有實際令牌用","分開。因此例外。

+0

虐待試用它,謝謝你,如果你不介意,你能告訴我我做錯了什麼嗎? – 7Kei

+0

瞭解的謝謝 – 7Kei

0

@Jean張貼你想什麼,但最終幫助理解的錯誤

e = dk.nextLine(); // input: Alfredo,Bauer,Cisco 
String[] elems = new String[e.length()]; // length is 20 
st = new StringTokenizer(e,","); // st has a length of 3 

現在,如果你這樣稱呼它

for(int i = 0;i<e.length();i++){ 
elems[i] = st.nextToken().toString(); // NoSuchElementException 
} 

因爲你試圖調用一個精簡版本,不存在的nextToken()

文檔:

返回此string tokenizer的下一個標記。
拋出: NoSuchElementException - 如果在此標記器的字符串中沒有其他標記。

解決您的問題使用的countTokens()

OR

while(st.hasMoreElements()){ 
    elems[i] = st.nextToken().toString(); 
} 
0

另一種選擇長度。

String[] elems = e.split(","); 

    System.out.print(Arrays.toString(elems));