我正在做一个关于 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/