试图在java中打印出数组

时间:2016-07-25 15:44:04

标签: java stringtokenizer nosuchelementexception

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();

你能帮我识别和理解这个问题吗?

3 个答案:

答案 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 ));