请教一个java txt文本替换NullPointerException

新手上路,请多包涵
  1. 问题
    想实现把txt文件里面所有的0001,0002,`9998,9999全部替换成第"x"章

  1. 具体代码

try {
            int count = 0;
            
            File f = new File("/storage/sdcard0/Download/rrt.txt");
            File ff = new File("/storage/sdcard0/Download/rrt2.txt");
            
            InputStream input = new FileInputStream(f);
            BufferedReader bufReader = new BufferedReader(new InputStreamReader(input));
            StringBuffer strBuf = new StringBuffer();
            
            String tmp;
            for (tmp = null; (tmp = bufReader.readLine()) != null; tmp = null) {
                
                // 行数
                while(tmp != null) {
                    count++;
                    tmp = bufReader.readLine();
                }
                
                // 替换全部
                // tmp = tmp.replaceAll("\\*", "#");
                // 替换第一个相匹配的项
                // tmp = tmp.replaceFirst("===", "\\* ");
                
                int a;
                for (a = 0; a <= count; a++) {
                    
                    String bb = Integer.toString(a);
                    tmp = tmp.replaceAll(bb, "第" + bb + "章");
                    System.out.println(a);
                }
                
                
                strBuf.append(tmp);
                strBuf.append(System.getProperty("line.separator"));
            }
            bufReader.close();
            
            PrintWriter printWriter = new PrintWriter(ff);
            printWriter.write(strBuf.toString().toCharArray());
            printWriter.flush();
            printWriter.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

在for 替换中报java.lang.NullPointerException

  1. 报错信息

at Main.main(Main.java:43)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.aide.ui.build.java.RunJavaActivity$1.run(SourceFile:108)
    at java.lang.Thread.run(Thread.java:841)

这是什么原因?

阅读 2.5k
1 个回答

这部分wihile代码结束的时候,tmp为null,所以下面的for循环自然就报空指针异常了。

                // 行数
                // 最后循环结束的时候 tmp == null 
                while(tmp != null) {
                    count++;
                    tmp = bufReader.readLine();
                }
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏