读取外部文本文件并存储到数组中
如何读取外部文本文件,可能使用扫描仪并将每行中的2个值存储到数组中。读取外部文本文件并存储到数组中
我想存储每行的第一个值的节点ID和父行号,这是每行中的最后一个值。
文本文件包含你所看到的下面
1 2,7,|0|BLACK|NULL
10 3,4,12,|3|BLACK|3
11 4,12,|4|BLACK|4
12 8,10,11,|3|BLACK|8
2 1,3,6,8,|1|BLACK|1
3 2,4,5,6,8,10,|2|BLACK|2
4 3,5,9,10,11,|3|BLACK|3
5 3,4,8,|3|BLACK|3
6 2,3,|2|BLACK|2
7 1,8,|1|BLACK|1
8 2,3,5,7,9,12,|2|BLACK|2
9 4,8,|3|BLACK|8
Shonna,你可以实现你想要使用HashMap,扫描器和一些简单的字符串解析。这是我的全班同学:
import java.io.*;
import java.util.*;
public class nodes {
private static HashMap<Integer, String> map = new HashMap<Integer, String>();
public static void main(String[] args) {
File file = new File("nodes.txt");
Scanner scnr = null;
try {
scnr = new Scanner(file);
} catch (FileNotFoundException e) {
}
while(scnr.hasNext()) {
String line = scnr.nextLine();
String[] getId = line.split("\\s+");
int id = Integer.parseInt(getId[0]);
int count = 0;
int copy = 0;
for(int i = 0; i < line.length(); i++) {
if(line.charAt(i) == '|')
count++;
if(count == 3) {
copy = i;
break;
}
}
String parent = line.substring(copy + 1);
map.put(id, parent);
System.out.println(map);
}
}
}
它所做的是读取文件的每一行,首先提取节点ID。然后它循环遍历行中的每个字符,直到它计数三个|
,此时我们知道该行的其余部分将是该节点的父节点。完成此操作后,它将ID与父对象在HashMap中配对。
谢谢当我运行虽然..线程“主”java.lang.NullPointerException异常 \t在Project1Scanner.main(Project1Scanner.java:19) – 2012-07-26 03:19:45
没关系,我的路径被搞砸了 – 2012-07-26 03:37:16
一个正则表达式的方法(已经离开了阵位作为练习读者):
BufferedReader br = new BufferedReader(new FileReader("hadoop_data.txt"));
String currentLine;
while ((currentLine = br.readLine()) != null) {
Matcher matcher = Pattern.compile("(\\d+).*\\|(\\w+)").matcher(currentLine);
if (matcher.matches()) {
System.out.println(matcher.group(1) + "\t" + matcher.group(2));
// add to array
}
}
到目前为止你有什么? – jtahlborn 2012-07-26 01:04:38