2012-11-30 2 views
0

나는 간단한 자바 프로그램에 java.util.Scanner와 아래에있는 텍스트 파일을 읽을 triying하고있다.- 토큰의 리턴 문자

scanner = new Scanner(filerader).useDelimiter("\\;|\\n"); 
while (scanner.hasNext()) { 
    int id= scanner.nextInt(); 
    String name = scanner.next(); 
    String code = scanner.next(); 

    System.out.printf(".%s.%s.%d.\n", name, code, id); 
} 

결과는 다음과 같습니다 :

0001;GUAJARA-MIRIM;RO 
0002;ALTO ALEGRE DOS PARECIS;RO 
0003;PORTO VELHO;RO 

나는 아래의 코드를 사용하여 텍스트 파일을 읽을

.GUAJARA-MIRIM.RO.1 
. 
.ALTO ALEGRE DOS PARECIS.RO.2 
. 
.PORTO VELHO.RO.3 
. 

그러나 각 줄의 세 번째 토큰의 결과가 incovenient가 '\ r 'caracther (ANSI 코드 13). 왜 ('\ r'이 어디에 있는지 명확하게하기 위해 서식 문자열에 '.'문자를 사용했습니다.)

그래서,

  1. 세 번째 토큰의 끝에 '\의 R'은 거기에 왜

    ?
  2. 우회 방법.

code.substring(0, 2) 같은 해결 방법을 사용하는 것은 매우 간단하지만, 대신에 나는 '\ r에'문자가 거기에 이유를 이해하고자합니다.

+0

안녕하세요! 내가 어떻게 해? 나는 나의 비율이 0 % 인 것을 본다 그러나 나는 그것을 바꾸는 방법을 모르고있다. "; | \\ R \\ n은 \\"하고 괜찮 았는데 내가 패턴을 사용 그냥 대답 다음 질문 –

+0

! 설명해 주셔서 감사합니다. – durron597

답변

1

일부 파일 시스템 (특히 Windows)에서 \r\n줄 바꿈 문자으로 사용됩니다. \n은 구분 기호 만 사용하므로 \r은 남아 있지 않습니다. 구분 기호에 \r도 추가하십시오.

, 당신의 코드가 좀 더 강력하게 새로운 라인 문자를 얻고 그에 따라 구분 기호를 사용하는 System.lineSeparator()를 사용하십시오.

+0

에 체크 표시 중 하나를 클릭 –

+0

@RafaelBorja 잘 알고 있습니다. 원하는 답변을 수락하십시오. –

1

당신은 행 구분 기호 (일명 캐리지 리턴 라인 피드)와 같은 \r\n 사용하는 Windows 파일을 사용하고 있습니다. Unix는 \n (줄 바꿈) 만 사용합니다.

는이 문제를 해결 스캐너 구분 기호에 \r를 추가합니다.

0

이미 주어진 발생하는 이유는,이 scanner.nextLine() 다음에 의해 분할을 사용하는 것입니다 피하기 위해 다른 방법; .

관련 문제