Java NullPointerException в массиве - PullRequest
       6

Java NullPointerException в массиве

0 голосов
/ 26 февраля 2012

Я получаю сообщение об ошибке при выполнении следующей операции.

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)

Ответы [ 6 ]

1 голос
/ 26 февраля 2012

Потому что specialConsonants [i] равен нулю.Вы не инициализировали это.

это похоже на

specialConsonants = {null,null,null,null}

Вам нужно сделать функцию setSpecial статической и затем вызывать ее перед циклом.

1 голос
/ 26 февраля 2012

specialConsonants и specialConsonantsUni не инициализируются. Вы только что определили setSpecial(), но не вызывали его перед выполнением замены

Правильное поведение будет:

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 должно быть статическим в этом случае

Кроме того, вы должны изменить размер specialConsonants на 6

0 голосов
/ 26 февраля 2012

определение массива выглядит неверно, кажется, вы хотите два массива одинакового размера, но вы определили как:

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];
0 голосов
/ 26 февраля 2012

Вы объявили specialConsonants как массив длины 4, но вы назначаете ему 6 элементов.

specialConsonants[4] имеет достаточно места для элементов 0, 1, 2 и 3. Вы должны объявить его как specialConsonants[6], если вы хотите, чтобы индексы были 0 - 5.

Тогда вам нужновызовите setSpecial() перед использованием массива в цикле.

0 голосов
/ 26 февраля 2012

Вы добавляете элементы в уже заполненный массив. Индексы массива начинаются с 0, когда вы объявили:

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

Это означает, что вы можете использовать только от specialConsonants[0] до specialConsonants[3]

Я предлагаю вам использовать hashmap для этой вещи.

HashMap<String, String> specialConsonants = new HashMap<String, String>();
....
specialConsonants.put("ං" , "ng" );
....
0 голосов
/ 26 февраля 2012
public static String[] specialConsonants = new String[4];

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

specialConsonants имеет размер массива 4. Для него нет 5-го индекса. Также вы не вызвали метод инициализатора массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...