2010-05-23 2 views
6

내가 스캔 파일을 통해 스캐너입니다스캐너은 약 2400 문자

while (scan.hasNextLine()) 
{ 
    String temp = scan.nextLine(); 
    System.out.println(temp); 
} 

같은 몇 가지 아주 기본적인 코드를 가지고있어 후 내 문자열을 잘라냅니다.

그러나 약 6k 문자 길이의 특정 라인에서는 temp가 2470 문자 다음에 나오는 것을 차단합니다. 그것이 자르면 특별한 것은 없습니다. 그것은 "호주"라는 단어의 중간에 있습니다. 줄에서 문자를 지우면 그 부분이 바뀝니다. 예 : 파일에서 문자 0-100을 삭제하면 스캐너는 이전에 100-2570이었던 것을 가져옵니다.

이전에는 큰 문자열로 스캐너를 사용했습니다. 어떤 생각이 잘못 될 수 있습니까?

답변

8

컷오프 지점에 불량 문자가있을 수 있습니다. 텍스트 편집기 대신 16 진 편집기에서 파일을보십시오. 아마도 null 문자가 포함되어 있거나 문자열 중간에 \r 일 가능성이 있습니까? Scanner.nextLine()이 임의로자를 것이라고 나는 거의 생각하지 않습니다.

또 다른 생각으로는 이 아니고이 모두 거기에 있는지 확인하십시오. 아마도 System.out.println은 문자열에 베타를하고 있습니다 - 다시 "이상한"문자가 포함되어 있기 때문입니까? temp.length()을 인쇄하면 어떻게됩니까?

편집 : 일부 문자를 잘라내면 어떻게 될지에 대해 약간 잘못 해석했습니다. 미안합니다. 다른 몇 가지 확인 :

  • 당신이 BufferedReader.readLine() 대신 Scanner의와 선을 읽는다면, 그것은 모든 것을 얻을합니까?
  • 올바른 인코딩을 지정하고 있습니까? 나는이 특별한 방법으로 이것이 나타날 이유를 볼 수는 없지만, 생각할 사항이다 ...
  • 줄의 모든 문자를 (파일에서) "A"로 바꾸면 아무것도 바뀌지 않습니까?
  • 이 줄 앞에 추가 줄을 추가하거나 앞에 줄을 제거하면 그 내용이 변경됩니까? 이 모든 실패

, 난 그냥 Scanner.nextLine()로 디버깅하는 것 - 자바에 대한 좋은 점 중 하나는 표준 라이브러리에 당신 디버그.

+0

길이를 인쇄 할 때 분명히 모든 것이있는 것은 아닙니다. 컨텍스트의 경우이 파일은 vim에서 편집중인 Excel에서 내보내는 .csv 파일입니다. 거기에 특수 문자가 있다고 생각하지 않습니다. 내가 말했듯이, 문자를 지우면 컷오프 포인트가 바뀝니다. 따라서 "호주"의 중간에서 자르지 만, "호주", "호주"및 그 다음 90 문자 전에 백 문자를 삭제하면 잘 인쇄됩니다. 똑같은 일이 다음 줄에서 발생합니다. 단 2470이 아니라 112에서 단절됩니다.이 두 줄만 작동하지 않습니다. 일부 줄이 더 길다. – Ventrue

+0

그냥 16 진수 편집기에서 살펴 봤는데 괜찮아요, 그냥 ascii 값. 두 번째 줄은 't'와 아포스트로피 사이를 잘라냅니다. – Ventrue

+0

@ Ventrue : LOL - 16 진수 편집기를 사용하여 resuggest하는 편집을 추가했습니다. 흠. 몇 가지 다른 제안을 추가했습니다 -하지만 "디버깅"이 필요한 것일 수도 있습니다 ... –