Emalka
Emalka

Reputation: 379

How to take StringTokenizer result to ArrayList in Java?

I want to take StringTokenizer result to ArrayList. I used following code and in 1st print statement, stok.nextToken() print the correct values. But, in second print statement for ArrayList give error as java.util.NoSuchElementException . How I take these results to an 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);

        }
    }

Upvotes: 3

Views: 13019

Answers (2)

Priyamal
Priyamal

Reputation: 2989

ArrayList<String> myArray = new ArrayList<String>();        
while (stok.hasMoreTokens()){
myArray.add(stok.nextToken());
}

dont call stock.nextToken outside the while loop that results in exceptions and printing out arraylist in System.out.println wont help you have to use a for loop.

for(String s : myArray){
System.out.Println(s);
}

Upvotes: 1

Andreas
Andreas

Reputation: 159165

Quoting javadoc of StringTokenizer:

StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

"New code" meaning anything written for Java 1.4 or later, i.e. ancient times.


The while loop will extract all values from the tokenizer. When you then call nextToken() after already having extracted all the tokens, why are you surprised that you get an exception?

Especially given this quote from the javadoc of nextToken():

Throws NoSuchElementException if there are no more tokens in this tokenizer's string.

Did you perhaps mean to do this?

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

Upvotes: 7

Related Questions