0

我如何读取外部文本文件,可能使用扫描仪并将每行的 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
4

2 回答 2

2

一种正则表达式方法(将数组位作为练习留给读者):

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
    }
}
于 2012-07-26T01:08:08.887 回答
0

Shonna,您可以使用 HashMap、Scanner 和一些简单的字符串解析来实现您想要的。这是我的全班:

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 中的父级配对。

于 2012-07-26T01:31:47.870 回答