如何在Java中将StringTokenizer结果带到ArrayList?

Ema*_*lka 1 java arraylist stringtokenizer

我想把StringTokenizer结果带到ArrayList.我使用下面的代码,在第一个print语句中,stok.nextToken()打印正确的值.但是,在ArrayList的第二个print语句中给出错误 java.util.NoSuchElementException.我如何将这些结果带到ArrayList?

 import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.StringTokenizer;

        public class Test {
        public static void main(String[] args) throws java.io.IOException {

            ArrayList<String> myArray = new ArrayList<String>();
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("Enter : ");
            String s = br.readLine();
            StringTokenizer stok = new StringTokenizer(s, "><");
            while (stok.hasMoreTokens())
                System.out.println(stok.nextToken()); 
            // -------until now ok

            myArray.add(stok.nextToken()); //------------???????????
            System.out.println(myArray);

        }
    }
Run Code Online (Sandbox Code Playgroud)

And*_*eas 6

引用javadoc StringTokenizer:

StringTokenizer是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它.建议任何寻求此功能的人都使用java或java.util.regex包的split方法String.

"新代码"是指为Java 1.4或更高版本编写的任何内容,即远古时代.


while循环将从标记生成器提取所有的值.当你nextToken() 已经提取了所有令牌之后再打电话时,为什么你会得到一个例外而感到惊讶?

特别是从javadoc的引用nextToken():

NoSuchElementException如果此tokenizer的字符串中没有其他标记,则抛出此异常.

你是否意味着这样做?

ArrayList<String> myArray = new ArrayList<>();
StringTokenizer stok = new StringTokenizer(s, "><");
while (stok.hasMoreTokens()) {
    String token = stok.nextToken(); // get and save in variable so it can be used more than once
    System.out.println(token); // print already extracted value
    // more code here if needed
    myArray.add(token); // use already extracted value
}
System.out.println(myArray); // prints list
Run Code Online (Sandbox Code Playgroud)