Java charAt(0)引发字符串越界异常

Java charAt(0)引发字符串越界异常,java,Java,所以我的老师想让我写一个程序,在这个程序中,我必须阅读一个txt文件,并将每一行作为字符串按字母顺序分配给一个树形图。我试着用扫描器读取文件,我试着用charAt0方法获取每行的第一个字母,但每次我运行它,它在主线程java.lang.StringIndexOutOfBoundsException中返回一个错误,表示Exception:字符串索引超出范围:0。因此,如果有人能指出我在程序中犯的错误,我将不胜感激 TreeMap<Integer, String> list= new

所以我的老师想让我写一个程序,在这个程序中,我必须阅读一个txt文件,并将每一行作为字符串按字母顺序分配给一个树形图。我试着用扫描器读取文件,我试着用charAt0方法获取每行的第一个字母,但每次我运行它,它在主线程java.lang.StringIndexOutOfBoundsException中返回一个错误,表示Exception:字符串索引超出范围: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);
 }

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

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

您的文件可能有一个尾随的换行符,扫描器将其删除,留下一个空字符串。

这意味着您试图获取的第一个字符是空的。在尝试获取字符之前,您需要进行检查。您的文件中有一个换行符。输入数据中有一个空行。是时候学习如何在IDE调试器中逐行遍历代码了。扫描仪不包括换行符,“对吗?事实上可能是有一条尾随的新线。”物理学家非常感激。