2017-02-27 7 views
4

내 로그에서이 정보가 계속 표시되지만 본인의 지식에 따르면이 시나리오는 불가능합니다.유효한 숫자에 대한 NumberFormatException

java.lang.NumberFormatException: For input string: "1487832810" 
     at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) ~[na:1.7.0_80] 
     at java.lang.Long.parseLong(Long.java:430) ~[na:1.7.0_80] 
     at java.lang.Long.parseLong(Long.java:483) ~[na:1.7.0_80] 

here is (내가 생각하는) 관련 소스 코드 (보안 목표 명세서의 줄 번호 일치)

424: char firstChar = s.charAt(0); 
425: if (firstChar < '0') { // Possible leading "+" or "-" 
426:  if (firstChar == '-') { 
427:   negative = true; 
428:   limit = Long.MIN_VALUE; 
429:  } else if (firstChar != '+') 
430:   throw NumberFormatException.forInputString(s); 

따라서, 첫 번째 문자 (1가) < '0'이라고 생각?

나는 그것이 문자 인코딩 문제 또는 뭔가라고 가정 할 수 있습니다.

아이디어가 있으십니까?

+3

아마도'1' 전에 인쇄 할 수없는 문자가있다? 'Long.parseLong'이라고 부르는 번호의 길이를 기록 할 수 있습니까? –

+2

메소드의 다른 부분이 있기 때문에 "1 < '0'"이 아닌 경우는 아닙니다. 아마 숨겨진 인물 일 겁니다. – Maroun

+1

오류를 표시하는 동안 문자열 앞뒤에 따옴표가 오는 이유는 무엇입니까? 문자열이 "\"1487832810 \ ""일 가능성이 있습니다. 그냥 물어 보는 건데. 문자열의 길이를 표시하고 알려주십시오. – gRaWEty

답변

2

문자열에 인쇄 할 수없는 문자가 있기 때문이라고 생각합니다. 인쇄 할 수없는 문자는 모두 < '0'입니다. 당신은 사람이 아닌 사람이 어떤을 인쇄하고있는 여기에서 볼 수 있습니다

당신이 출력에 예외를 제기하는 문자를 볼 수없는 이유는

http://web.itu.edu.tr/sgunduz/courses/mikroisl/ascii.html

.

이러한 경우에 예외를 발생시키지 않으려면 if 문 또는 정규식을 사용하여 이러한 문자를 확인하는 것과 같은 비교를 더 정확하게 수행해야합니다. 어쨌든, 이러한 문자를 대체하는 SO에 몇 가지 질문을 다음과 같이있다 :

Fastest way to strip all non-printable characters from a Java String

How can I replace non-printable Unicode characters in Java?

+1

OP의 출력물이'꼬리'에서 왔습니다. - 나는'vi'를 통해 전체 ST를 조사하기 시작했고, 숫자 앞에'^ @'을 많이 보여주었습니다! 정답. 지금 나는이 문자들이 어디에서 왔는지 알아 내야 만합니다!. 고마워. – pstanton