在使用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将替换什么。
答案 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