我想要做的是,在一行中读取包含多个单词的文件,然后在2d arraylist中添加每个单词。这应该是[[凯文,凯文,凯文] [工作,工作,工作]]
下面的代码运作良好,但确实如此[[kevin,kevin,kevin,jobs,jobs,jobs]]
应该使用嵌套for来完成,但有人可以帮忙吗?
public void getReference() throws IOException
{
String line=null;
connectRead("computer");
//this is a method that reads a file in a format kevin kevin kevin kevin
try
{
reference.add(new ArrayList<String>());
while ((line=bufferedReader.readLine())!=null)
{
st = new StringTokenizer(line);
for ( int i = 0 ; i < st.countTokens() ; i++)
{
reference.get(i).add(st.nextToken());
reference.get(i).add(st.nextToken());
reference.get(i).add(st.nextToken());
reference.get(i).add(st.nextToken());
}
}
System.out.println(reference);
bufferedReader.close();
}
catch ( IOException e )
{
System.out.println(e);
}
}
文件中的文字看起来像这样
凯文美国黑客 wozniak美国黑客 工作美国黑客答案 0 :(得分:1)
你总是得到references.get(i),其中i = 0,所以无论什么时候读取新行,都会在第0个索引处从ArrayList开始插入令牌。
试试这个,但这个结构对我来说有点混乱。可能正在显示输入文件的结构有助于使代码更好。
public void getReference() throws IOException
{
String line=null;
connectRead("computer");
//this is a method that reads a file in a format kevin kevin kevin kevin
try
{
reference.add(new ArrayList<String>());
int indexOfReferences =0 ;
while ((line=bufferedReader.readLine())!=null)
{
st = new StringTokenizer(line);
for ( int i = 0 ; i < st.countTokens() ; i++)
{
reference.get(indexOfReferences).add(st.nextToken());
}
indexOfReferences++;
}
System.out.println(reference);
bufferedReader.close();
}
catch ( IOException e )
{
System.out.println(e);
}
}