Java 在单元格数量减半后开始读取 null

标签 java file-io

我正在做一个关于 CLI 电子表格程序的项目。我使用此代码从文件输入:

    DataInputStream in=new DataInputStream(System.in);
    System.out.print("\nEnter filename (with path) - ");
    String fn=in.readLine();
    FileReader fr=new FileReader(fn);
    BufferedReader br=new BufferedReader(fr);

    String sen="";
    while(true)
    {
        String sn=br.readLine();
        if(sn==null)
            break;
        sen=sen+sn;
    }
    StringTokenizer st=new StringTokenizer(sen,"|");
    String s[][][]=new String[(st.countTokens()/9)][9][3];
    int r_0=(st.countTokens()/9);
    int r,c;
    r=c=0;

    for(int i=0;i<st.countTokens();i++)
    {
        StringTokenizer st1=new StringTokenizer(st.nextToken(),"ɰ");
        s[r][c][0]=st1.nextToken();
        s[r][c][1]=st1.nextToken();
        s[r][c][2]=st1.nextToken();

        System.out.println(s[r][c][0]+"\t"+s[r][c][1]+"\t"+s[r][c][2]); // to be deleted
        c++;
        if(c==9)
        {
            r++;
            c=0;
        }
    }

默认情况下,电子表格有 8 个可见行(总共 9 个)。直到第 5 行,第 5 列(或直到 s[5][5][0/1/2]),程序正确地从文件中读取值。但在那之后它开始读取空值。我想知道这种突然偏离正常行为的原因。它与内存使用有关吗? [更新 - 它发生在一半的单元格数量之后,而不是特定的 [5,5,0]]

示例输入:

 ɰ     ɰ     |Aɰ     ɰ     |Bɰ     ɰ     |Cɰ     ɰ     |Dɰ     ɰ     |Eɰ     ɰ     |Fɰ     ɰ     |Gɰ     ɰ     |Hɰ     ɰ     |1ɰ     ɰ     |8ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |2ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |3ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |4ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |5ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |6ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     | ɰ     ɰ     |

最佳答案

你应该将 for 循环替换为

while (st.hasMoreTokens())

而不是 for 循环。无论如何你都没有使用 i

此外,countTokens() 函数在检索 token 期间更改其值(参见 Javadoc)

关于Java 在单元格数量减半后开始读取 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050838/

相关文章:

java - 方法() vs Class.method()?

c++ - 优化文件读取C++

c - 重新分配 : invalid next size

java.io.StreamCorruptedException : invalid stream header: 00000001

java - Java中以yyyymmddhhmmss.mmm格式递增日期

java - Android JSON 对象创建

Java 创建 csv 文件,有 "和 ; 在其中,在 Excel 中正确打开

java - 无法在所有计算机上访问 JAR 中的资源

c - C 中的文件 I/O 管理

java - Eclipse SWT 小部件 : Combining two Listeners