2

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の原因となるのがこちらです。

2 番目の引数を null として渡せないというルールはありますか?

置換する単語がnullの場合、JVMが置換するものを認識しています。

4

3 に答える 3

2

null jls-4が表示されます

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

ヌルとは?

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

replaceAll() の2 番目の引数は文字列であり、何もないため指定できませnullnull

 public String replaceAll(String regex, String replacement)
                                          ↑

したがって、呼び出しを修正する必要があります

s.replaceAll("@WORLD@", ""); // "" empty String  
于 2013-10-18T07:54:12.927 に答える
0

ここで null を渡すことはできません。置換中に、Matcherクラスは新しい単語の長さをチェックして char を char に置き換えようとするためです。文字列に表示したい場合は、「null」を入れることができます。

于 2013-10-18T07:44:35.337 に答える