读取外部文本文件并存储到数组中

时间:2012-07-26 00:27:36

标签: java arrays java.util.scanner

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

2 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分: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中的父对配对。