Java 我的数组不是';t将其值保留在while循环之外?

Java 我的数组不是';t将其值保留在while循环之外?,java,Java,我正在测试数组列表是否保留了文本文件中的值,当我在while循环外打印数组以检查这一点时,我只从文件中获取最后一个值(20141013)。当我在while循环中打印for循环时,我会逐行获取列表。问题是我现在必须接受这个数组,删除任何不是8位数的东西,打印它,接受8位数的值,打印它,然后排序并打印它,但我认为我的数组没有保留这些值。如何确保数组中填充了正确的值?我不必验证任何日期 import java.util.*; 公共类令牌1{ 公共静态文本文件输入myFile; 公共静态StringTo

我正在测试数组列表是否保留了文本文件中的值,当我在while循环外打印数组以检查这一点时,我只从文件中获取最后一个值(20141013)。当我在while循环中打印for循环时,我会逐行获取列表。问题是我现在必须接受这个数组,删除任何不是8位数的东西,打印它,接受8位数的值,打印它,然后排序并打印它,但我认为我的数组没有保留这些值。如何确保数组中填充了正确的值?我不必验证任何日期

import java.util.*;
公共类令牌1{
公共静态文本文件输入myFile;
公共静态StringTokenizer myTokens;
公共静态字符串[]列表;
公共静态字符串线;
公共静态void main(字符串[]args){
myFile=新文本文件输入(“project1.txt”);
而((line=myFile.readLine())!=null){
myTokens=新的StringTokenizer(行,“,”);
列表=新字符串[myTokens.countTokens()];
int i=0;
while(myTokens.hasMoreTokens()){
list[i]=myTokens.nextToken();
i++;
}//而
}//而
对于(int j=0;j
在循环中重新分配
列表
数组。因此,其中只包含最后一个读取行

要将元素添加到列表中:

public static List<String> list = new ArrayList<>();

// in the while loop
for(String s : line.split(",")){
    list.add(s);
}
使用
StringTokenizer
编辑:

// in the while loop
myTokens = new StringTokenizer(line, ",");
while(myTokens.hasMoreTokens()){
    list.add(myTokens.nextToken());
}

在循环中重新分配
列表
数组。因此,其中只包含最后一个读取行

要将元素添加到列表中:

public static List<String> list = new ArrayList<>();

// in the while loop
for(String s : line.split(",")){
    list.add(s);
}
使用
StringTokenizer
编辑:

// in the while loop
myTokens = new StringTokenizer(line, ",");
while(myTokens.hasMoreTokens()){
    list.add(myTokens.nextToken());
}

Jean回答了你的问题,但我只需要补充一点:

while ((line = myFile.readLine()) != null) {
   while ((line = myFile.readLine()) != null) {
     ...
   }
}
你永远不会在文件的第一行工作

您从文件中读取一行,然后在使用第一行之前再读取一行,您可能需要在执行任何操作时删除第二行。除非你有意忽略第一行。
:)

Jean给了你这个问题的答案,但我只需要补充一点:

while ((line = myFile.readLine()) != null) {
   while ((line = myFile.readLine()) != null) {
     ...
   }
}
你永远不会在文件的第一行工作

您从文件中读取一行,然后在使用第一行之前再读取一行,您可能需要在执行任何操作时删除第二行。除非你有意忽略第一行。
:)

对于文本文件的每一行,您都将i重新初始化为0,并列出令牌数的长度。所以,对于你读的每一行,你都在抹掉你以前的工作。我能做些什么来阻止这种情况发生呢?吉恩·洛格尔特的答案很好。试试这个解决办法。基本上,您需要在循环之前初始化列表。在循环中添加(不重置计数器),然后在循环后读取。对于文本文件的每一行,您将i重新初始化为0,并列出令牌数的长度。所以,对于你读的每一行,你都在抹掉你以前的工作。我能做些什么来阻止这种情况发生呢?吉恩·洛格尔特的答案很好。试试这个解决办法。基本上,您需要在循环之前初始化列表。在循环中添加到它(不重置计数器),然后在循环后读取它。用我目前使用的字符串标记器没有办法做到这一点吗?我知道我可以使用拆分,但是字符串标记器呢?我使用了你的方法,但是我应该能够删除任何不是8位数的内容,并对其进行排序,对吗?数组也是s还是列表?因为我现在要做的是将任何不是8位数的数字都删除到一个单独的数组中。另外,我似乎无法获得数组的长度?是否无法使用字符串标记器实现这一点?我知道我可以使用拆分,但是字符串标记器呢?我使用了你的方法,但是我应该能够删除任何不是8位数的内容,并对其进行排序,对吗?数组也是s还是列表?因为我现在要做的是将任何不是8位数的数字都删除到一个单独的数组中。而且我似乎无法获得数组的长度?