Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

        }
    }
like image 612
Emalka Avatar asked Nov 16 '25 12:11

Emalka


2 Answers

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
like image 140
Andreas Avatar answered Nov 19 '25 03:11

Andreas


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);
}
like image 33
Priyamal Avatar answered Nov 19 '25 03:11

Priyamal



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!