我正在编写一个程序来分析输入的文本并计算平均字母数。 我让它适用于用户输入文本的时间,但是当从文件中读取文本时,我无法使其工作。
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)
非常感谢任何帮助 感谢
答案 0 :(得分:2)
您正在逐行读取整个文件并将其打印到System.out
完成后,然后尝试处理数据,但是你已经读完了文件,因此str为'null'而你的程序就死了。
答案 1 :(得分:0)
在您的代码中,您有这个循环:
while ((str = br.readLine()) != null) {
System.out.println(str + "\n");
}
当str
不是null
时,这会读取您文件中的行
这意味着当它停止时,str
null
。
由于您之后未提供str
非null
值,因此当您尝试在代码中稍后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数组。