2012-07-26 2 views
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 
+0

지금까지 무엇을 가지고 계십니까? – jtahlborn

답변

0

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를 추출하는 것입니다. 그런 다음 줄의 각 문자를 순환하여 세 개의 숫자가 | 인 것으로 계산합니다. 그 시점에서 나머지 줄이 노드의 부모가됩니다. 이 작업이 끝나면 HashMap에서 id와 부모를 연결합니다.

+0

감사합니다. 내가 ...을 실행할 때 오류가 발생했습니다. 스레드 "main"에서 java.lang.NullPointerException \t Project1Scanner.main (Project1Scanner.java:19) –

+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 
    } 
}