我的数组是否在while循环之外保留其值?

时间:2014-10-17 21:50:08

标签: java

我正在测试我的数组列表是否保留了我的文本文件中的值,当我在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
}

2 个答案:

答案 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) {
     ...
   }
}

你永远不会在你档案的第一行工作。

你从文件中读取一行,然后在对第一行做任何事之前再读一行,你可能需要摆脱第二行。除非你想故意忽略第一行。 :)