这是我想要做的,比如说我有一个这种格式的输入文件(input.txt),行数或列数可以不同,列用空格分隔:
the DT B-NP
current JJ I-NP
account NN I-NP
deficit NN I-NP
will MD B-VP << CURRENT TOKEN
narrow VB I-VP
to TO B-PP
only RB B-NP
我想把每个单词都放到2维数组x [i,j]的元素中,这样我就可以使用索引文件了:
x[0,0]
x[0,1]
x[-1,0]
x[-2,1]
得到这个结果:
will
MD
deficit
NN
括号中的数字是数组的i,j索引,起始位置[0,0]是标有“&lt;&lt;&lt; CURRENT TOKEN”的行的第一个单词(在这种情况下是单词“will”)。
所以现在我可以通过以下方式将文件读取到数组:
import java.awt.List;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class ReadfileIntoArray {
String[] data = new String[100];
public void read() throws IOException {
FileReader fr = new FileReader("/Users/home/Documents/input.txt");
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Print from here:");
int i = 0;
while ((line = br.readLine()) != null) {
data[i] = line;
System.out.println(data[i]);
i++;
}
br.close();
// This is for resize the data array (and data.length reflect new size)
String[] dataNew = new String[i];
System.arraycopy(data, 0, dataNew, 0, i);
data = dataNew;
System.out.println("Data length: " + data.length);
}
public static void main(String[] args) throws IOException {
ReadfileIntoArray rfta = new ReadfileIntoArray();
rfta.read();
}
}
但是当我搜索时,我可能需要使用
List<String> arrList =FileUtils.readLines(new File("myfile.txt"));
对于未定义的长度(??)不是很确定但我认为需要导入特殊包才能使用它,我收到错误 _ 第二件事是如何确定位置[0,0]的起始元素,以及如何指示负面指数如[-2,1] ......
我如何设法完成上述任务,对我来说这看起来很复杂。非常感谢!
答案 0 :(得分:0)
您可以使用ArrayList的ArrayList无限长度。
public void read() throws IOException {
List<ArrayList<String>> mylist = new ArrayList<ArrayList<String>>();
FileReader fr = new FileReader("/Users/home/Documents/input.txt");
BufferedReader br = new BufferedReader(fr);
String line;
int current_line = 0;
int cnt = 0;
while ((line = br.readLine()) != null) {
String arr[];
arr = line.split("\t");
mylist.add(new ArrayList<String>());
for(int i = 0; i < arr.length; i++){
mylist.get(cnt).add(arr[i]);
if(mylist.get(cnt).get(i).equals("<<"))
current_line = cnt;
}
cnt++;
}
br.close();
}
现在你有了arraylist的arraylist。
要获取第i_行的第j个元素,您应该写mylist.get(i).get(j)
这样,你不需要增加阵列的大小,并且线的长度也不重要,即第一行是10弦,第二行是15是可以接受的。
此外,请将current_line
作为变量而不是负数索引,而使用current_line - 1
作为索引。