charAt(0)抛出一个超出范围的字符串异常

时间:2017-08-07 03:04:42

标签: java

所以我的老师要我编写程序,我必须通过txt文件读取并按字母顺序将每一行作为字符串分配给TreeMap。我试图使用Scanner来读取文件,我试图通过使用charAt(0)方法获取每行的第一个字母,但每次运行它时,它都会返回错误,说“线程中的异常”主“ java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0“所以如果有人能指出我在程序中犯的错误,我会非常感激。

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

 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);
 }

1 个答案:

答案 0 :(得分:1)

在阅读第一个字符前进行长度检查:

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

你的文件可能有一个尾随的换行符,Scanner剥离,留下一个空字符串。