编译时我一直得到同样的异常。任何人都可以解释为什么我一直得到这个错误,它意味着什么或我需要做什么? 我想知道我将来做错了什么。
public static void Second()
{
int n = stringList.listSize();
for(int i=0; i<n-1; i=i+2)
{
System.out.println(stringList.retrieveAt(i) + " " + stringList.retrieveAt(i+1));
}
}
public static void Display()throws IOException, FileNotFoundException
{
Scanner infile = new Scanner(new FileReader("D:\\DataFile.txt"));
StringTokenizer token = new StringTokenizer(infile.nextLine());
StringElement str = new StringElement();
while(infile.hasNext())
{
str.setString(token.nextToken());
stringList.insert(str);
}
stringList.print();
}
例外:
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at Programmmmmm.Display(Programmmmmm.java:121)
at Programmmmmm.main(Programmmmmm.java:67)
答案 0 :(得分:0)
你正在穿越溪流。
您正在循环Scanner
,但检查nextToken()
上的StringTokenizer
。
您没有遵循Sun Java编码标准:方法名称应以小写字母开头。
这种方法做得太多了:
糟糕的主意。
尝试更像这样的事情:
public static List<String> tokenizeTextFile(String path) throws IOException, FileNotFoundException {
List<String> words = new ArrayList<String>();
BufferedReader br = null;
if (path != null && path.length() > 0) {
try {
br = new BufferedReader(new FileReader(path));
String line;
while ((line = br.nextLine()) != null) {
String [] tokens = line.split("\\s+");
for (String token : tokens) {
words.add(token);
}
} finally {
close(br); // add this method.
}
}
return words;
}
答案 1 :(得分:0)
您正在调用token.nextToken()
而不检查token
中是否存在更多令牌。
不应检查infile
是否包含更多元素,而应检查token
是否包含更多代币。
而不是
while (infile.hasNext()) { ...
你应该做
while (token.hasMoreTokens()) { ...
有关更多信息和代码示例,请参阅Oracle's Java documentation on StringTokenizer
。