Java 缓冲读取器的标记化问题
因此,我正在编写一个java程序,该程序应该一直分析用户的字符串,直到标准输入结束(直到他们按下CTRL+D或输入文件结束)。程序按预期工作,但是当我按CTRL+D时,出现空指针异常。以下是相关代码:Java 缓冲读取器的标记化问题,java,nullpointerexception,bufferedreader,Java,Nullpointerexception,Bufferedreader,因此,我正在编写一个java程序,该程序应该一直分析用户的字符串,直到标准输入结束(直到他们按下CTRL+D或输入文件结束)。程序按预期工作,但是当我按CTRL+D时,出现空指针异常。以下是相关代码: BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String line = " "; while (line != null) { line = in
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line = " ";
while (line != null) {
line = in.readLine();
String[] tokens = line.split(" ");
System.out.println(line); ......
空指针指向String[]tokens=line.split(“”)强>
看起来代码试图标记一个空的行。但我认为我写它的方式永远不会试图标记空行。有人能帮我吗?将while循环更改为:-
while ((line = in.readLine())!= null) {
并移除其中的第一行
请注意,您正在读取循环中的行,然后稍后进行测试。因此,您将在文件末尾获得一个NPE
另外,如果您在阅读后对文件进行标记化,我更愿意使用
Scanner
类。问题在于而是预检查条件。在循环的开头,行
不是空的。您应该改用do while
while (line != null) {
line = in.readLine(); // in the loop, but in.readLine() returns null
String[] tokens = line.split(" "); // OH SHI- LINE IS NULL
System.out.println(line);
谢谢你!在发布此消息几秒钟后,我意识到我的错误haha@user1718698.. 没问题。:)