2013-10-10 4 views
-3

Java의 BufferedReader에 문제가 있습니다. 나는 선을 파싱의 HashMap에 삽입, 큰 파일에서 라인으로 라인을 읽고있다,하지만 결과 만 몇 줄 Java의 파일에서 행 단위로 읽기

Map< Integer, String> data = new HashMap<>(1000000); 
    int completedTestsCount = 0; 
    BufferedReader reader = new BufferedReader(new FileReader("file.txt"), 120000); 
    String line = null; 
    while ((line = reader.readLine()) != null) { 
     if (line.contains("START executing FOR")) 
     {     
      String tempId = line.substring(42, line.length() - 38); 
      int startId = Integer.parseInt(tempId); 
      String dateTime = line.substring(6, 14); 
      data.put(startId, dateTime);     
     } 

의 HashMap

에있는 그리고 내가 "정보 00을 구문 분석 할 파일에서 라인의 예 : 00 : 09 - 2013 년 9 월 23 일 00:00:09 GMT + 00 : 00 2013에 FOR START363625를 실행하기 시작했습니다. 따라서 키는 테스트 ID입니다.

+0

어떤 키를 사용합니까? 몇 가지 코드를 추가 할 수 있습니까? – BobTheBuilder

+0

여기에 코드 게시 – SpringLearner

+0

사용한 코드를 게시 할 수 있습니까? 그렇게하면 우리가 당신을 도울 수 있습니다 당신의 일부가 잘못 됐어. =) – justhalf

답변

0

가장 일반적인 이유는 파일의 줄 수가 많기 때문입니다 startId. put 키가 같은 키/값 쌍이 생길 때마다 은 해당 키의 이전 맵 항목 인을 바꿉니다. (A Map는 ... 정확히 하나 개의 값으로 하나의 키를 매핑)

IDS는이 같은 진정으로을, 또는 당신이 각 라인에서 ID를 추출하는 방법이 잘못되었다고 할 수 있기 때문에이 될 수도 있습니다; 예 : 실제 ID가 항상 문자 42에서 시작하지는 않습니다.

예를 들어 설명하면, 예제 행의 문자 42는 3625 ... 2이고 올바른 것 같습니다!

3

의 HashMap은

String tempId = line.substring(42, line.length() - 38); 

가 핵심이다, 당신은 파일을 읽고,이 고유하지 않을 수도 있습니다, 키가 고유 같은 데이터를 저장, 그래서 귀하의 경우에 할 수있다. 이것은 문제이므로 키가 고유한지 확인해야합니다.

0

HashMaps를 사용하려면 모든 stardId 값이 고유해야합니다.

이 경우지도 대신 목록을 사용해야합니다.

사용자 정의 KeyValuePair 클래스를 정의하고 목록에 개체를 추가하십시오.

class KeyValuePair{ 
    int startId; 
    String dateTime; 
} 

List<KeyValuePair> data = new ArrayList<>(); 


String tempId = line.substring(42, line.length() - 38); 
int startId = Integer.parseInt(tempId); 
String dateTime = line.substring(6, 14); 
data.add(new KeyValuePair(startId, dateTime)) 
+0

키가 실제로 고유하지 않다고 가정합니다. OP 문제에 대한 대안 설명이 있습니다. 키를 추출하기위한 그의 "논리"가 올바르지 않다는 것을 의미한다. –

+0

insert, find 및 delete 연산이있는 dataStructure가 필요합니다 ~ O (1) – user2842269

관련 문제