2011-11-01 4 views
4

나는 1000 개의 단어로 된 약 500 개의 텍스트 파일을 가지고 있습니다. 나는 그 단어들을 색인해야한다. 글자 단위로 텍스트 파일을 읽는 가장 빠른 방법은 무엇입니까?Java - 문자로 가장 빠르게 읽을 수있는 방법

InputStream ist = new FileInputStream(this.path+"/"+doc); 
BufferedReader in = new BufferedReader(new InputStreamReader(ist)); 

String line; 

while((line = in.readLine()) != null){ 


    line = line.toUpperCase(Locale.ENGLISH); 
    String word = ""; 

    for (int j = 0; j <= line.length(); j++) { 
     char c= line.charAt(j); 
    // OPERATIONS 

} 
+1

완벽하게 괜찮아 보입니다.이 접근 방식에있어 문제가 있습니까? –

+3

이것은 한 번에 한 글자를 읽지 않고 왜 글자 단위로 읽습니까? –

+0

첫 번째 : 지적 된 바와 같이, 이것은 char로 char을 읽지 않습니다. 제목을 변경하십시오. 초 : 이것은 무시할만한 양의 데이터처럼 들립니다. 세 번째 : 한 번 실행되는 것처럼 들립니다. 왜 성능에 전혀 관심이 있습니까? 당신이 그 질문을 할 때 당신의 앱이 끝났어야합니다. (기분이 상할 지 모르겠다. 간단히 말해서, 실제로 문제가 될 때까지 성능에 대해 걱정하지 마라.) – kritzikratzi

답변

0

InputStreamReader의 읽기() 메소드를 한 번에 문자를 읽을 수 있습니다 : 여기 내 최초의 시도이다.

FileReader 또는 BufferedReader 또는 예제로 랩핑 할 수 있습니다.

희망이 도움이됩니다.

1

read()은 성능에 큰 차이를주지 않습니다.

더 읽기 : Peter Lawery's comparison of read() and readLine()

을 이제 원래의 질문에 돌아 오는 :
입력 문자열 : hello how are you?
그래서 당신이 라인의단어 인덱스 즉, 필요

BufferedReader r = new BufferedReader(new InputStreamReader(inputStream)); 
String line; 
while ((line = r.readLine()) != null) { 
    String[] splitString = line.split("\\s+"); 
    //Do stuff with the array here, i.e. construct the index. 
} 

참고 : 패턴 \\s+은 탭, 공백 등과 같이 공백으로 구분 기호를 문자열에 넣습니다.

+0

split 메소드가 원래 읽기 문자열과 공유하므로 복사되지 않는다. 이것은 실제로 문자로 문자를 읽는 것보다 시간을 많이 벌어서 모두 혼자서 모으는 것입니다. –

0

행을 읽은 다음 행 char를 char로 다시 스캔하지 마십시오. 그렇게하면 모든 캐릭터를 두 번 처리하게됩니다. BufferedReader.read()를 통해 문자를 읽으십시오.

관련 문제