2012-12-12 3 views
3

텍스트 파일을 읽는 컴파일러 프로그램을 작성 중입니다. 텍스트 파일의 일부 명령은 텍스트 파일의 특정 행으로 건너 뛰고 거기에서 읽도록 지시합니다. 이 코드는 문서가 끝날 때까지 한 번에 한 줄씩 읽습니다. 파서가 텍스트 파일의 특정 줄로 건너 뛰거나 앞으로 건너 뛰게 할 여지가 있습니까? 예를 들어 제가 현재 8 호선에 있고 명령은 4 호선으로 돌아가는 것입니다.자바에서 텍스트 파일을 구문 분석하는 동안 행을 건너 뛰는 방법

다음은 파일 구문 분석을위한 코드입니다.

try { 
    FileInputStream fstream = new FileInputStream("compilers.txt"); 
    BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
    String strLine; 

    while ((strLine = br.readLine()) != null && checker == false) { 
     // rest of code in here 
    } 
    in.close(); 
} 
+4

왜 모든 줄을 읽고 목록에 저장하고 (각 줄을 하나씩 입력합니까?) 작업보다합니까? – jlordo

답변

1

당신은 Map

HashMap<Integer, String> 

키와 함께이 작업을 수행 할 수있는 당신의 행 번호이며 값은 라인입니다. 따라서 필요한 경우 줄 번호로 줄을 가져올 수 있습니다.

Map<Integer, String> lineMap = new HashMap<Integer, String>(); 
int i = 1; 
while ((strLine = br.readLine()) != null && !checker) { 
    lineMap.put(i, strLine); 
    // do what you want 
    // if you are in line 8 (i=8) 
    // get my line 4 (lineMap.get(4)) 
    i++; 
} 
+0

이봐, 고마워,이 완벽하게 작동! 너는 생명의 은인이야! –

+0

해시 맵을 완전히 사용하지 못했습니다! ArayList는 올바른 컬렉션이 될 것입니다. – AlexWien

2

는 스트림 mark()reset() 기능, 가 있지만 BufferedStream의를 사용하는 경우이 실패 할 수 있습니다. 더 나은 당신 ArrayList, 모든 라인을 하나의 항목으로 전체 파일을 읽어보십시오. ArrayList에 대한

예 :

List<String> lines = new ArrayList<String>(); 
while ((strLine = br.readLine()) != null) { 
    lines.add(strLine); 
} 

// later get line by: 
// first line has index 0  
String line = lines.get(8); 
+0

해답을 주셔서 감사합니다. 해시 맵을 사용하기로 결정했습니다. :) –

+0

당신은 그 장면에서 HashMap을 사용하지 않으며, ArrayList는 이동합니다. 해시 맵은 이름 등과 같은 키를위한 것이지만 0에서 N-1까지의 순서화 된 시퀀스 형식은 아닙니다. – AlexWien

관련 문제