Java replaceAll抛出空指针异常

时间:2013-10-18 07:34:30

标签: java

在使用String类的replaceAll API时,我遇到了Null Pointer Exception。

然后我尝试用下面粘贴的小片段,我正在接受NPE。

    String s = "HELLO @WORLD@ I AM.";
    System.out.println(s.replaceAll("@WORLD@", null)) ; 

我也在String.java类中找到了

  public Matcher appendReplacement(StringBuffer sb, String replacement) {
        .......//code

        while (cursor < replacement.length()) { ..//code}
        .......//code
}

所以这里调用replacement.length()是NPE的原因。

是否有规则我们不能将第二个参数作为null传递?

我知道如果替换单词为null,JVM将替换什么。

3 个答案:

答案 0 :(得分:5)

用空字符串替换字符串而不是null。 s.replaceAll("@WORLD@", "" )

答案 1 :(得分:0)

你不能在这里传递null,因为在替换时,Matcher类尝试检查新单词的长度以用char替换char。如果要查看字符串,可以输入“null”。

答案 2 :(得分:0)

您可以看到null jls-4

s.replaceAll("@WORLD@", null); //NPE

什么是null?

The null type has one value, the null reference, represented by the null literal null. 
It is nothing.  

replaceAll()第二个参数是String,它不能是null,因为null什么都不是

 public String replaceAll(String regex, String replacement)
                                          ↑

所以,你必须纠正这个电话

s.replaceAll("@WORLD@", ""); // "" empty String