2014-10-13 1 views
0

큰 텍스트 파일을 처리해야합니다. 각 행에는 거의 400 개의 열이 있고 파일에는 거의 800000 개의 행이 있습니다. 각 행의 형식은 다음과 같습니다. 파일은 같은 :어떻게 split()을 많은 수의 요소와 함께 사용할 수 있습니까?

340,9,2,3 ........ 5,2,

마지막 열은 LA의 경우 제가하고 싶은 것은, 각 라인이며, LA

,이 줄의 첫 번째 열을 인쇄하십시오.

내가 간단한 프로그램이

BufferedReader bufr = new BufferedReader(new FileReader ("A.txt")); 
    BufferedWriter bufw = new BufferedWriter(new FileWriter ("LA.txt")); 

    String line = null; 
    while ((line = bufr.readLine()) != null) { 
     String [] text = new String [388]; 
     text = line.split(","); 
     if (text [387] == args[2]) { 

      bufw.write(text[0]); 
      bufw.newLine(); 
      bufw.flush(); 
     } 

    } 

    bufw.close(); 
    bufr.close(); 

할 쓰기하지만 배열의 길이가 큰, 난 내가 분할을 사용하고 이후 java.lang.ArrayIndexOutOfBoundsException 를 ("받은 캔트 보인다, ") 행의 마지막 열을 가져 오려면 배열 범위를 벗어날 것입니다. 어떻게해야합니까? 감사.

+0

이렇게되어야합니다. ---> String [] text = line.split (","); – StackFlowed

+0

분할에 배열이 388 길이라는 보장은 없습니다. 예를 들어 빈 줄은 배열 [1]로 분할됩니다. – Compass

+0

나는 당신이 말한 것과 같이 그것을 바 꾸었습니다. 그러나 나는 거의 400 컬럼을 가지고 있기 때문에, 그것과 관련이 있습니까? – jacobbb

답변

2

textString.split가 제대로 크기의 배열을 만들 때, 초기화 할 필요가 없습니다 : 또한 참조 평등 (==)를 사용하여 문자열을 비교하는

String[] text = line.split(","); 

. 당신은 .equals()을 사용해야 다음 인덱스 387가 너무 크기 때문에

if (text[387].equals(args[2])) { ... } 

당신은 아마 java.lang.ArrayIndexOutOfBoundsException을 받고 있습니다.

text[text.length - 1] 
0
String [] text; 

코드를 이렇게 변경하십시오. 크기를 초기화 할 필요가 없습니다. String.split 메서드를 실행하면 배열의 크기가 자동으로 초기화됩니다.

1

수정을이

String [] text = line.split(","); 
    if (text [text.length - 1].equals(args[2])) { 

     bufw.write(text[0]); 
     bufw.newLine(); 
     bufw.flush(); 
    } 

args[2]LA입니다 가정하십시오 : 당신이 마지막 요소를 취득하려는 경우 사용합니다.

관련 문제