2017-03-26 1 views
-2

코드에서 NumberFormatException이 계속 발생하지만 이유를 파악할 수 없습니다. java.lang.NumberFormatException의에서 ("1965 년 내가 오류"가 입력 문자열에 대한 java.lang.NumberFormatException의 "입니다String.split을 사용한 후의 NumberFormatException

:

import java.io.*; 
import java.util.*; 

public class SongCollection 
{ 
    ArrayList<Song> songs; 
    public SongCollection(ArrayList<Song> songs) { 
     this.songs = songs; 
    }  

    public void addSong(String line) { 
     String[] parts = line.split("\t"); 
     int year = Integer.parseInt(parts[0]); 
     int rank = Integer.parseInt(parts[1]); 
     String artist = parts[2]; 
     String title = parts[3]; 
     Song addedSong = new Song(year, rank, artist, title); 
     songs.add(addedSong); 
    } 

    public void printSongs(PrintStream output) { 
     for (int i = 0; i < songs.size(); i++) { 
      Song song = songs.get(i); 
      output.println(song.toString()); 
     } 
    } 
} 

내가되어 addSong 방법에 사용되는 문자열은 this 입력 파일에서 있었다) "

편집 (추가 디버거 창 사진) : enter image description here

여러분의 도움에 감사드립니다!

+1

'parseInt'는 까다롭기 때문에 String에 공백이 없어야하므로'parts [0] .trim()'을 사용해보십시오. – john16384

+0

여전히 나에게 같은 오류가 발생합니다 : \ –

+0

문자열이 디버거에서 올바르게 보이나요? –

답변

-1
your input "1965" doesn't contain "\t". so the value of line will be 1965, 
int year = Integer.parseInt(parts[0]); 
parts[0] will have 1965 value, and it will be complied successfully, but 
int rank = Integer.parseInt(parts[1]); 

는 NumberFormatException이 발생하므로, 귀하의 의견은 '\ t'문자와 숫자를 포함해야합니다 있는지 확인 어떤 일이 없습니다 [1] 일부되도록 부품 [0] 및 부품의 값 [1]해야 숫자 여야합니다.

+0

int 년 라인에서 오류가 발생하므로 NumberFormatException이 해당 라인에서도 발생하고 있지 않은 것입니까? –

-1

나는 왜 나는 오류가 계속 발생하는지 알 수 있습니다. 메모장을 열 때 파일에서 BOM을 제거해야했습니다. 모든 것이 이제는 효과가 있습니다. 모든 도움을 주셔서 감사합니다!

관련 문제