2012-02-26 8 views
0

次の操作を実行するとエラーが発生します。配列内のJava NullPointerException

public static String text = "ng"; 
public static String[] specialConsonants = new String[4]; 
public static String[] specialConsonantsUni = new String[6]; 

public void setSpecial(){ 
    specialConsonantsUni[0] = "ං"; 
    specialConsonants[0] = "ng"; 
    specialConsonantsUni[1] = "ඃ"; 
    specialConsonants[1] = "h/g"; 
    specialConsonantsUni[2] = "ඞ"; 
    specialConsonants[2] = "N/g"; 
    specialConsonantsUni[3] = "ඍ"; 
    specialConsonants[3] = "R/g"; 
    // special characher Repaya 
    specialConsonantsUni[4] = "ර්" + "\u200D"; 
    specialConsonants[4] = "/R/g"; 
    specialConsonantsUni[5] = "ර්" + "\u200D"; 
    specialConsonants[5] = "/\\r/g"; 
} 
public static void main(String args[]){ 

    for (int i=0; i < specialConsonants.length; i++){ 
     text = text.replace(specialConsonants[i], specialConsonantsUni[i]); 
     System.out.println(text); 
    } 
} 

ロケールアプリを作成しようとしています。だから、いくつかのフォントが見えないかもしれません。エラーは次のとおりです。

Exception in thread "main" java.lang.NullPointerException 
at java.lang.String.replace(Unknown Source) 
at in.isuru.srtuc.Stuff.main(Stuff.java:223) 
+0

それはあなたがあなたの 'setSpecialを呼び出す必要がありますことが表示されます() 'メソッドを使って配列の値を初期化する –

答えて

0
public static String[] specialConsonants = new String[4]; 

public void setSpecial(){ 
    // ... 
    specialConsonants[5] = "/\\r/g"; 
} 

specialConsonantsそれには第5回インデックスがありません配列サイズ4です。また、配列初期化メソッドも呼び出されていません。

1

specialConsonantsおよびspecialConsonantsUniは開始されない。ディメンションを変更する必要が

public static void main(String args[]){ 
    setSpecial(); 
    for (int i=0; i < specialConsonants.length; i++){ 
     text = text.replace(specialConsonants[i], specialConsonantsUni[i]); 
     System.out.println(text); 
    } 
} 

ノートもそのsetSpecialはまた、その場合には

静的である必要があります:あなたは正しい動作は以下のようになり

を置き換える行う前にそれを呼ばれるだけsetSpecial()を定義しなくてきましたspecialConsonants〜6

1

specialConsonants [i]がnullであるためです。あなたはそれを初期化していません。

その

specialConsonants = {null,null,null,null} 

のようにあなたが機能setSpecial静的は、ループの前にそれを呼び出すようにする必要があります。

0

既に塗りつぶした配列に要素を追加しています。あなたが宣言した場合は配列のインデックスは、0から始める:あなたが唯一のspecialConsonants[0]

specialConsonants[3]に使用できることを意味し

public static String[] specialConsonants = new String[4]; 

は、私はあなたがこの事のためにハッシュマップを使用することをお勧め。

HashMap<String, String> specialConsonants = new HashMap<String, String>(); 
.... 
specialConsonants.put("ං" , "ng"); 
.... 
0

あなたは長さ4の配列としてspecialConsonants宣言しましたが、あなたはそれに6つの要素を割り当てています。 5.

次に、あなたが配列を使用する前にsetSpecial()を呼び出す必要があります -

specialConsonants[4]を使用すると、インデックス0にしたい場合は、specialConsonants[6]としてそれを宣言する必要があり、要素0、1のための十分な余地がある2、および3 あなたのループで。

0

配列定義は、間違ったに見えますが、2つの同じサイズの配列をしたいが、あなたのように定義されたようだ。私はそれがあるべきだと思う

public static String[] specialConsonants = new String[4]; 
public static String[] specialConsonantsUni = new String[6]; 

public static String[] specialConsonants = new String[6]; 
public static String[] specialConsonantsUni = new String[6]; 
関連する問題