2016-12-06 39 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] + " "); 
     } 

    } 
相关问题