分析从Java中的文件读取的文本

时间:2015-03-26 20:20:24

标签: java arrays file console ioexception

我正在编写一个程序来分析输入的文本并计算平均字母数。 我让它适用于用户输入文本的时间,但是当从文件中读取文本时,我无法使其工作。

public static void ReadFromFile() throws IOException  {
String filename = "name.txt";
String str = new String(new char[100]);
try{
    FileReader fr = new FileReader(filename);
    BufferedReader br = new BufferedReader(fr);

    while ((str = br.readLine()) !=null) {
    System.out.println(str + "\n");
    }
    br.close();
    } catch(IOException e) {
        System.out.println("File not found");
    }
while (c != str.length()) {
    if (str.charAt(c) >= 'a' && str.charAt(c) <= 'z') {
        count[str.charAt(c) - 'a']++;   
    }
    c++;
}
for (c = 0; c<26;c++){
    if (count[c] !=0){
        double num = count[c];
        double denom = str.length();
        double average = num / denom;
        System.out.print((char) (c + 'a') + " occurs " + count[c] + " times in the entered string. Average is ");
        System.out.println(average);
    }}}}

我一直收到错误消息

Exception in thread "main" java.lang.NullPointerException
at MainMenu.ReadFromFile(MainMenu.java:79)
at MainMenu.main(MainMenu.java:25)

非常感谢任何帮助 感谢

2 个答案:

答案 0 :(得分:2)

您正在逐行读取整个文件并将其打印到System.out

完成后,然后尝试处理数据,但是你已经读完了文件,因此str为'null'而你的程序就死了。

答案 1 :(得分:0)

在您的代码中,您有这个循环:

while ((str = br.readLine()) != null) {
    System.out.println(str + "\n");
}

str不是null时,这会读取您文件中的行 这意味着当它停止时,str null

由于您之后未提供strnull值,因此当您尝试在代码中稍后str处运行方法时,会获得NPE:< / p>

while (c != str.length()) {  // str is null here!
    if (str.charAt(c) >= 'a' && str.charAt(c) <= 'z') {
        count[str.charAt(c) - 'a']++;
    }
    c++;
}

我从您的代码中猜测,您希望收集有关文件中每一行的信息。要做到这一点,不要只打印每一行,而是将计数逻辑移动到正在读取文件的循环中:

// read each line from the file
while ((str = br.readLine()) != null) {
    System.out.println(str + "\n");

    // collect character data for this line
    while (c != str.length()) {
        if (str.charAt(c) >= 'a' && str.charAt(c) <= 'z') {
            count[str.charAt(c) - 'a']++;
        }
        c++;
    }
}

然后在代码中稍后处理count数组。