StringIndexOutOfBoundsException:字符串索引超出范围:读取文件时为0

时间:2014-03-07 16:26:07

标签: java bufferedreader

我有一个简单的程序来读取文件。现在这条线之间有一个空白区域。我得到StringIndexOutOfBoundsException:字符串索引超出范围:0错误。请帮忙

class main{
    public static void main(String args[]) {
       String str;
        try {
    BufferedReader br = new BufferedReader ( new FileReader("train.txt"));
    while((str=br.readLine())!=null){ 
    System.out.println(str);
    int a=str.charAt(0);

    if(str.trim().length()==0){
        System.out.println("stupid");
    }
    else if(a==32){
        System.out.println("ddddd");
    }

    else if(str.charAt(0)=='A' ||str.charAt(0)=='a'){
        System.out.println("hahha");
    }
    else if(str.charAt(0)=='C' ||str.charAt(0)=='c'){
        System.out.println("lol");
    }

    else if(str.charAt(0)=='D' ||str.charAt(0)=='d'){
        System.out.println("rofl");
    }
    else{
    System.out.println("blank");
    }


}
        }
catch (FileNotFoundException e){
    System.out.println(e);
}
catch (IOException e){
    System.out.println(e);
}
    }

2 个答案:

答案 0 :(得分:3)

如果一行为空,则索引为0时没有字符,因为该字符串为空。您正在执行此行:

int a=str.charAt(0);

在测试线是否为空之前。有几种可能的解决方案。一种是重新组织你的代码:

if(str.trim().length()==0){
    System.out.println("stupid");
    continue; // so rest of loop body is skipped
}
int a=str.charAt(0);
if(a==32){
    System.out.println("ddddd");
}

答案 1 :(得分:0)

下面的行会在读取空行时抛出StringIndexOutOfBoundsException

int a=str.charAt(0);

将其替换为:

if(str.trim().length()>0)
a=str.charAt(0);