如何在我的 .text 单词计数器中修复此 NullPointerException
How do fix this NullPointerException in my .txt word-counter
我正在尝试制作一个 Java 程序来计算“*.txt”文件中的单词和行数。到目前为止,一切都很好。该代码仅在“.txt”只有 2 行时才有效。如果在其中放入更多行,我会在代码的 .split(" "); 部分得到 NullPointerException。我读过某处可能是 .readLine() 函数的内容。但我真的不知道到底是什么原因造成的。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class txt_counter {
static String FilePath = "C:\Users\diasc\Desktop\test.txt";
public static void main(String[] args) throws IOException{
FileReader finput = null;
BufferedReader binput = null;
try {
finput = new FileReader(FilePath);
System.out.println("Orignal txt output:");
int a;
while ((a = finput.read()) != -1) {
System.out.print((char) a);
}
binput = new BufferedReader(new FileReader(FilePath));
int Zcount = 1;
int Wcount = 1;
while ( binput.readLine() != null ) {
String[] woerter = binput.readLine().replaceAll("\s+", " ").split(" ");
System.out.println("\n\nsplitted String: ");
for(int i =0; i<woerter.length; i++)
{
System.out.println(woerter[i]);
}
Wcount = Wcount + woerter.length;
Zcount++;
}
System.out.println("\nLines: " + Zcount);
System.out.println("Words: " + Wcount);
}finally {
if (finput != null) {
finput.close();
}
if(binput != null) {
binput.close();
}
}
}
控制台输出:
Orignal txt output: lol
I am pretty stupid. haha idk
send halp
splitted String:
I
am
pretty
stupid.
haha
idk
Exception in thread
"main" java.lang.NullPointerException
at txt_counter.main(txt_counter.java:32)
在您的 while 循环中,您从缓冲的 reader 中读取一行并将其与 null 进行比较,但该行随后从未使用过。然后在 while 循环的主体中读取下一行而不检查结果是否为空。
通常逐行读取文件的方式是这样的:
String line;
while ((line = binput.readLine()) != null) {
String[] woerter = line.replaceAll("\s+", " ").split(" ");
...
我正在尝试制作一个 Java 程序来计算“*.txt”文件中的单词和行数。到目前为止,一切都很好。该代码仅在“.txt”只有 2 行时才有效。如果在其中放入更多行,我会在代码的 .split(" "); 部分得到 NullPointerException。我读过某处可能是 .readLine() 函数的内容。但我真的不知道到底是什么原因造成的。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class txt_counter {
static String FilePath = "C:\Users\diasc\Desktop\test.txt";
public static void main(String[] args) throws IOException{
FileReader finput = null;
BufferedReader binput = null;
try {
finput = new FileReader(FilePath);
System.out.println("Orignal txt output:");
int a;
while ((a = finput.read()) != -1) {
System.out.print((char) a);
}
binput = new BufferedReader(new FileReader(FilePath));
int Zcount = 1;
int Wcount = 1;
while ( binput.readLine() != null ) {
String[] woerter = binput.readLine().replaceAll("\s+", " ").split(" ");
System.out.println("\n\nsplitted String: ");
for(int i =0; i<woerter.length; i++)
{
System.out.println(woerter[i]);
}
Wcount = Wcount + woerter.length;
Zcount++;
}
System.out.println("\nLines: " + Zcount);
System.out.println("Words: " + Wcount);
}finally {
if (finput != null) {
finput.close();
}
if(binput != null) {
binput.close();
}
}
}
控制台输出:
Orignal txt output: lol
I am pretty stupid. haha idk
send halpsplitted String:
I
am
pretty
stupid.
haha
idk
Exception in thread
"main" java.lang.NullPointerException
at txt_counter.main(txt_counter.java:32)
在您的 while 循环中,您从缓冲的 reader 中读取一行并将其与 null 进行比较,但该行随后从未使用过。然后在 while 循环的主体中读取下一行而不检查结果是否为空。 通常逐行读取文件的方式是这样的:
String line;
while ((line = binput.readLine()) != null) {
String[] woerter = line.replaceAll("\s+", " ").split(" ");
...