2016-12-06 15 views
1
import java.io.*; 
import java.util.*; 


public class chopMiddle { 

    public static void main(String[] args) { 
     String sample = "1,2,3,4,5"; 
     StringTokenizer tokenizer = new StringTokenizer(sample, ","); 

     while(tokenizer.hasMoreTokens()) { 
      int convertedToInt = Integer.parseInt(tokenizer.nextToken()); 

      int [] array = new int [3]; 

      for(int i = 0; i < array.length; i++) 
      { 
       array[i] = Integer.parseInt(tokenizer.nextToken()); 
       System.out.println(array[i] + " "); 
      } 
     } 
    } 
} 

私は文字列をトークンに分割しようとし、Integer.parseIntメソッドを使用して、トークンをint値に変換します。 文字列から呼び出し元への2番目から4番目の整数のint値を含むサイズ3の配列を返したいとします。私は、問題は、それが第五トークンになったとき、それは新しい配列を作成し、その後、それを読んで、3続きを読むしようとするだろうスレッド "main"の例外なぜjava.util.NoSuchElementException?

Exception in thread "main" java.util.NoSuchElementException 
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349) 
at chopMiddle.main(chopMiddle.java:18) 

答えて

4

をコンパイルしたとき、それはメッセージの下に示しているので、私は何か間違ったことをしています。

2番目、3番目、4番目を読んだ後、両方のループを解除する必要があります。

+0

問題解決、おかげでたくさん! –

2
while(tokenizer.hasMoreTokens()) { 
    int convertedToInt = Integer.parseInt(tokenizer.nextToken()); 

    int [] array = new int [3]; 

    for(int i = 0; i < array.length && tokenizer.hasMoreTokens(); i++) //check hasMoreTokens 
    { 
     array[i] = Integer.parseInt(tokenizer.nextToken()); 
     System.out.println(array[i] + " "); 
    } 
} 

あなたが呼び出すたびにチェックする必要があります:tokenizer.nextToken()

1

あなたがチェックした場合tokenizerforループ自体に多くの要素を持っている場合、あなたはまったくwhileループを必要としません。

は例の下に試してみてください。

public static void main(String[] args) { 
     String sample = "1,2,3,4,5"; 
     StringTokenizer tokenizer = new StringTokenizer(sample, ","); 

     int[] array = new int[3]; 

     for (int i = 0; i < array.length && tokenizer.hasMoreTokens(); i++) { 
      array[i] = Integer.parseInt(tokenizer.nextToken()); 
      System.out.println(array[i] + " "); 
     } 

    } 
関連する問題