2013-01-10 2 views
0

800 메가 이상의 데이터가있는 경우 데이터는 중단 선이 아닙니다. 정규식 예제 Ex로 작업 할 것입니다.Java :: 파일에서 정규 표현식을 800 메가 바이트 이상 사용하는 방법

String.replaceAll("([a-z][a-z][.?!]+) ?([A-Z][a-z]+)", "$1\r\n$2"); 

또는 기타.

파일 크기가 큰 경우 정규 표현식을 사용하려면 어떻게해야합니까?

+2

Q : 사용해 보셨습니까? 확실히 호기심이있다;) – paulsm4

+0

당신은 분명히 그것을 위해 정규식을 사용하고 싶지 않다! – fge

+2

800 메가가 너무 커서 현실적으로 메모리에 보관할 수없는 문자열입니다. 'sed'와 같이 파일을 스트림으로 처리 할 수있는 명령 줄 도구를 사용해야합니다. – Bohemian

답변

0

확실히 이런 크기의 정규식을 사용하고 싶지는 않습니다.

고전적인 Unix 도구 (sed, perl, awk)가 도움이되지 않는 경우 구아바의 CharMatcher을 살펴보십시오. 파일을 바이트 배열로 읽은 다음이를 문자열로 변환하고, CharMatcher를 사용하여 관심있는 것이 있으면 찾으십시오. 수정 된 배열을 쓰면 가능합니다.

그리고 물론 파일에 인라인으로 쓰지 말고 변형을 성공적으로 수행 한 경우 원래 이름으로 바꿉니다.

구두점 필요에 대해 예를 들어 CharMatcher.anyOf("?!.")을 사용할 수 있습니다.

0

메모리에 데이터를로드 할 충분한 양의 RAM이 있으면 그 이유를 알 수 없습니다. 32 비트 시스템 64가 더 많은 양의 주소 지정을 처리 할 수 ​​있고 그 때 4 기가 바이트 ~ 제한을 사용할 것이라면 제한적인 가치는 아키텍처라고 생각합니다.

또한 Java VM을 기본 VM 메모리 최대 설정보다 훨씬 더 많이 설정해야합니다. 예 :

java -Xmx1g myprogram 

나는 그것을 다시 말하지 않을 것이다. 거기에 파일을 먼저 분할 할 수있는 방법이 없습니다. 일반적인 delimeter를 찾으십시오. 감사합니다.

관련 문제