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

问题描述:

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

到目前为止你有什么? – jtahlborn 2012-07-26 01:04:38

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

+0

谢谢当我运行虽然..线程“主”java.lang.NullPointerException异常 \t在Project1Scanner.main(Project1Scanner.java:19) – 2012-07-26 03:19:45

+0

没关系,我的路径被搞砸了 – 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 
    } 
}