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

Java 读取外部文本文件并存储到数组中,java,arrays,java.util.scanner,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

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

}
import java.io.*;
导入java.util.*;
公共类节点{
私有静态HashMap map=newhashmap();
公共静态void main(字符串[]args){
File File=新文件(“nodes.txt”);
扫描仪scnr=空;
试一试{
scnr=新扫描仪(文件);
}catch(filenotfounde异常){
}
while(scnr.hasNext()){
String line=scnr.nextLine();
字符串[]getId=line.split(\\s+);
intid=Integer.parseInt(getId[0]);
整数计数=0;
int copy=0;
对于(int i=0;i

它所做的是读取文件的每一行,首先提取节点id。然后它循环遍历该行中的每个字符,直到它计数到三个
,此时我们知道该行的其余部分将是节点的父级。完成此操作后,它将id与HashMap中的父项配对。

到目前为止,您有什么发现?谢谢,当我运行..线程“main”java.lang.NullPointerException中的异常位于Project1Scanner.main(Project1Scanner.java:19)时,我遇到了一个错误
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);
        }
    }

}