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的数组,其中包含从字符串到调用者的第2到第4个整数的int值。我做错了什么,因为它在编译时显示在下面的消息
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at chopMiddle.main(chopMiddle.java:18)
答案 0 :(得分:4)
问题是当它到达第5个令牌时,它会读取它,然后创建一个新阵列并尝试再读3个。
阅读完第二,第三和第四后,你应该打破两个循环。
答案 1 :(得分: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()
答案 2 :(得分:1)
如果您检查tokenizer
循环中for
是否包含更多元素,那么您根本不需要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] + " ");
}
}