【发布时间】:2016-04-18 03:34:06
【问题描述】:
我在 .txt 文档中得到了一组数据,格式如下:
0 1
0 3
0 4
0 5
0 6
0 7
...等等
我的问题是,我怎样才能解析这个,以便将整数的左列放入数组中,同样将右列的数字放入数组中。每对数字都有自己的一行。
在我给出的这组数据中,int[] leftColumn 将全为零,int[] rightColumn 将包含 1, 3, 4, 5 ,6 ,7。
【问题讨论】:
我在 .txt 文档中得到了一组数据,格式如下:
0 1
0 3
0 4
0 5
0 6
0 7
...等等
我的问题是,我怎样才能解析这个,以便将整数的左列放入数组中,同样将右列的数字放入数组中。每对数字都有自己的一行。
在我给出的这组数据中,int[] leftColumn 将全为零,int[] rightColumn 将包含 1, 3, 4, 5 ,6 ,7。
【问题讨论】:
java.util.Scanner 已经为您完成了大部分繁重的工作,只需使用它即可:
List<Integer> leftColumnTmp = new LinkedList<>();
List<Integer> rightColumnTmp = new LinkedList<>();
try (Scanner sc = new Scanner("myfile.txt")) {
while (sc.hasNextLine()) {
leftColumnTmp.add(sc.nextInt());
rightColumnTmp.add(sc.nextInt());
}
}
int[] leftColumn = leftColumnTmp.stream().mapToInt(Integer::intValue).toArray();
int[] rightColumn = rightColumnTmp.stream().mapToInt(Integer::intValue).toArray();
【讨论】:
List<Integer> 转换为int[] 的语句。如果您不想依赖 Java 8,您可以自己使用 for 循环或使用第三方,如 Apache Commons Lang 的 ArrayUtils
有一种简单的读取文件的方法,使用java8时:
List<Integer> left = new ArrayList();
List<Integer> right = new ArrayList();
Files.lines(Paths.get("c:\\lines.txt"))
.map(l -> l.split("\\s"))
.forEachOrdered(l -> {
left.add(Integer.parseInt(l[0]));
right.add(Integer.parseInt(l[1]));
});
如果你真的需要int[]s,你可以稍后转换:
int[] leftArray = left.stream().mapToInt(Integer::intValue).toArray();
int[] rightArray = right.stream().mapToInt(Integer::intValue).toArray();
【讨论】:
逐行读取文件并按空格分割行,然后将它们添加到数组中。
BufferedReader br = new BufferedReader(new FileReader(<PATH/TO/FILE>));
try {
String line = br.readLine();
List<Integer> leftColumn = new ArrayList<>();
List<Integer> rightColumn = new ArrayList<>();
while (line != null) {
String strarray[] = line.split(" ");
for (int count = 0; count < strarray.length ; count++) {
leftColumn.add(Integer.parseInt(strarray[count]));
rightColumn.add(Integer.parseInt(strarray[++count]));
}
line = br.readLine();
}
System.out.println("Left Column :"+leftColumn);
System.out.println("Right Column :"+rightColumn);
}finally {
br.close();
}
【讨论】:
sb