2016-12-06 74 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值。 我想返回一個大小爲3的數組,其中包含第二個到第四個整數從字符串到調用方的int值。難道我做錯了什麼,因爲它顯示了下面的消息時,我編爲什麼線程中的異常「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

當它到達第五代幣將成爲問題,它會讀取它,然後創建一個新的數組,並嘗試讀取3個。

當你讀完第二,第三和第四之後,你應該打破兩個循環。

+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循環本身更多的元素,那麼你將不需要0​​循環可言。

試試下面的例子:

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] + " "); 
     } 

    } 
相關問題