2017-08-07 12 views
0

私の先生は、txtファイルを読み、各行を文字列としてアルファベット順に割り当てる必要があるプログラムを記述したいと思っています。 Scannerを使用してファイルを読み込もうとしましたが、charAt(0)メソッドを使用して各行の最初の文字を取得しようとしていますが、実行するたびに "スレッドのメイン" java.lang.StringIndexOutOfBoundsException:文字列のインデックスが範囲外です。0 "誰かが私がプログラムで行った間違いを指摘できれば、本当に感謝しています。charAt(0)は範囲外の文字列をスローします

TreeMap<Integer, String> list= new TreeMap<Integer, String>(); 
    Scanner scan= new Scanner(System.in); 
    System.out.println("Enter file name"); 
    String filename= scan.nextLine(); 

    try{ 
    scan= new Scanner (Paths.get(filename)); 
    } 
    catch (IOException ioException) 
    { 
    System.err.println("Error opening file. Terminating."); 
    System.exit(1); 
    } 

    try 
    { 
    while(scan.hasNextLine()) 
    { 
    String line= scan.nextLine(); 
    char ch1 = line.charAt(0); 
    int key=(int) ch1; 
    list.put(key, line); 
    } 
    } 
catch (IllegalStateException stateException) 
{ 
    System.err.println("Error reading from file. Terminating."); 
    System.exit(1); 
} 
+6

これは、の最初の文字を取得しようとしている文字列が空であることを意味します。キャラクターを手に入れようとする前にそれをチェックする必要があります。 – Carcigenicate

+1

ファイルに改行があります。 –

+1

入力データに空白行があります。 – Thilo

答えて

1

Here is a picture of the text file that I am trying to read

は1文字目を読み取る前に、長さのチェックを行います。

if(line.length() > 0) { 
    char ch1 = line.charAt(0); 
    int key = (int)ch1; 
    list.put(key, line); 
} 

あなたのファイルはおそらくScannerストリップオフは、空の文字列をあなたに残して改行を持っています。

+0

実際にはおそらく、改行文字があることでしょう。 –

+0

@MadPhysicist多くのことを感謝します。 –

関連する問題