2012-04-04 2 views
13

저는 현재 Java를 배우고 있으며, 많은 수의 행으로 구성된 파일을로드하려는이 문제에 직면했습니다 (행마다 파일을 읽음)하고 싶은 것은 특정 행을 건너 뜁니다 (의사 -암호).java의 텍스트 파일에서 특정 줄을 건너 뛰는 방법은 무엇입니까?

the line thats starts with (specific word such as "ABC") 

나는

if(line.startwith("abc")) 

를 사용하려고 노력하지만 그것은 작동하지 않았다.

public String loadfile(.........){ 

//here goes the variables 

try { 

     File data= new File(dataFile); 
     if (data.exists()) { 
      br = new BufferedReader(new FileReader(dataFile)); 
      while ((thisLine = br.readLine()) != null) {       
       if (thisLine.length() > 0) { 
        tmpLine = thisLine.toString(); 
        tmpLine2 = tmpLine.split(......); 
        [...] 
+0

+1. 이유가 확실하지 않은 이유는 모르겠지만 다시 – Neil

+0

-1 java-ee 서블릿이나 jsp 및 이미 삭제 된 게시물의 복사본과 아무 ​​관계가 없습니다. –

+2

+1 투표가 중단되었는지 확실하지 않습니다. 잘못된 태그가 있으면 그냥 수정하십시오. – devsnd

답변

9

이 뜻은 모든에 line 변환

if (line.toUpperCase().startsWith(­"ABC")){ 
    //skip line 
} else { 
    //do something 
} 

보십시오 : 내가 잘못하고 있어요 만약 내가 여기에 도움을 요청하고 그 이유는 부하 기능의 일부가 아래에있어, 확실하지 않다 어퍼 문자 "를 사용하여 문자열이 ABC으로 시작하는지 확인합니다.

그리고 true이면 아무 것도하지 않고 (행 건너 뛰기) else 부분으로 들어갑니다.

Apache Commons에서 제공하는 기능인 startsWithIgnoreCase을 사용할 수도 있습니다. 두 개의 문자열 인수를 취합니다.

public static boolean startsWithIgnoreCase(String str, 
              String prefix) 

이 함수는 boolean을 반환합니다. 그리고 문자열이 지정된 접두사로 시작하는지 확인합니다.

문자열이 접두사로 시작되고 대소 문자를 구분하지 않으면 true를 반환합니다.

+0

. 그가 단지 우리에게 신속한 의사 코드를 주 었는지 또는 그가 실제로하고있는 것이 었는지 확실하지 않지만'startwith'는'startsWith'와 같지 않고'abc'는'ABC'와 같지 않습니다 – Nicholas

2

경우에 사용하는 중요한 시도가없는 경우 StringUtils.startsWithIgnoreCase(String str, String prefix)Apache Commons

This function return boolean. 

See javadoc here

사용법 :

당신이 큰 입력 파일이있는 경우
if (StringUtils.startsWithIgnoreCase(­line, "abc")){ 
    //skip line 
} else { 
    //do something 
} 
+0

' - 라이너 'vikiii. –

+1

매우 사실입니다. 초심자 자바 프로그래머가 Apache Commons 라이브러리를 가능한 한 빨리 배워서 공통 유틸리티를 다시 작성하지 않는 것이 중요하다고 생각합니다. –

+0

몇 차례에 걸쳐 정확하게 수행 했으므로 이제 귀하의 요점을 보았습니다. –

1

, 당신은 코드를 생성합니다 a OutOfMemoryError. te 코드를 편집하지 않고는 파일에 대해 할 수있는 일이 없습니다 (파일이 커지면 더 많은 메모리를 추가 할 수 없습니다).

내가 선택한 선을 메모리에 저장합니다. 파일 크기가 커지면 (2GB 정도) 메모리가 4GB가됩니다. (String의 이전 값과 새 값).

이 문제를 해결하려면 스트림을 사용해야합니다.

FileOutpuStream을 작성하고 해당 스트림에 selcted 행을 작성하십시오.

귀하의 방법을 변경해야합니다. 큰 입력의 경우 요 문자열을 반환 할 수 없습니다

public String loadfile(...){ 

당신은 Stream 또는 파일을 반환 할 수 있습니다.

public MyDeletingLineBufferedReader loadFile(...) 
0

당신은 사용할 수 있습니다

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
    String lineString; 
    try{ 
    while((lineString = br.readLine()) != null) { 
     if (lineString.toUpperCase().startsWith(­"abc")){ 
      //skip 
      } else { 
      //do something 
      } 
     } 
    } 

또는

static boolean startsWithIgnoreCase(String str, String prefix) 방법을 org.apache.commons.lang.StringUtils 다음과 같은에.

BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
     String lineString; 
     try{ 
      while((lineString = br.readLine()) != null) { 
       if (StringUtils.startsWithIgnoreCase(­lineString, "abc")){ 
       //skip 
       } else { 
       //do something 
       } 
       } 
      } 
관련 문제