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
似乎就行了:
你能帮我识别和理解这个问题吗?elems [i] = st.nextToken()。toString();
答案 0 :(得分:4)
正确的版本:
String[] elems = e.split(",");
for(String elem : elems) {
System.out.println(elem);
}
您犯的错误是e.length()
返回string
(其字符数)的大小,因此您最终调用的st.nextToken()
次数超过了由{分隔的实际令牌的次数{1}}。因此例外。
答案 1 :(得分: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()。
文档:
从此字符串标记生成器返回下一个标记 抛出: NoSuchElementException - 如果没有更多的令牌 tokenizer的字符串。
要解决您的问题,请使用countTokens()
的长度OR
while(st.hasMoreElements()){
elems[i] = st.nextToken().toString();
}
答案 2 :(得分:0)
另一种选择。
String[] elems = e.split(",");
System.out.print(Arrays.toString(elems ));