我正在测试我的数组列表是否保留了我的文本文件中的值,当我在while循环外打印数组来检查时,我只从文件中获取最后一个值(20141013)。当我在while循环中打印for循环时,我逐行获取列表。问题是我现在必须采取该数组,删除任何不是8位数字打印它,取8位数值打印它然后排序并打印它但我不认为我的数组保留这些价值观。如何确保我的数组填充正确的值?我不必验证任何日期。
20141003 20131105 19990205 20080304,20080305,20080306 19990206,hello,20141001,200003 20050505 July November,August 19640503 19980707 19642199 20141013
import java.util.*;
public class Tokens1 {
public static TextFileInput myFile;
public static StringTokenizer myTokens;
public static String[] list;
public static String line;
public static void main(String[] args) {
myFile = new TextFileInput("project1.txt");
while ((line = myFile.readLine()) != null) {
myTokens = new StringTokenizer(line, ",");
list = new String[myTokens.countTokens()];
int i = 0;
while (myTokens.hasMoreTokens()) {
list[i] = myTokens.nextToken();
i++;
} //while
} //while
for (int j = 0; j < list.length; j++)
System.out.println(list[j]);
} //main
}
答案 0 :(得分:4)
您在循环中重新分配了list
数组。因此,只包含最后一条读取行。
您想要在列表中添加元素:
public static List<String> list = new ArrayList<>();
// in the while loop
for(String s : line.split(",")){
list.add(s);
}
现在list
包含所有字符串,您可以在while循环外打印它们:
for(String s : list) {
System.out.println(s);
}
使用StringTokenizer
进行修改:
// in the while loop
myTokens = new StringTokenizer(line, ",");
while(myTokens.hasMoreTokens()){
list.add(myTokens.nextToken());
}
答案 1 :(得分:1)
Jean给了你一个问题的答案,但我只想补充一点:
while ((line = myFile.readLine()) != null) {
while ((line = myFile.readLine()) != null) {
...
}
}
你永远不会在你档案的第一行工作。
你从文件中读取一行,然后在对第一行做任何事之前再读一行,你可能需要摆脱第二行。除非你想故意忽略第一行。 :)