2016-07-25 51 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));