Сортировка отдельных элементов в массиве строк по алфавиту

Я должен написать программу, которая читает список слов словаря из файла. Впоследствии символы каждого слова располагаются в алфавитном порядке и сохраняются в исходном массиве. (Например: Бэтмен станет aabmnt). Теперь вот что я сделал до сих пор:

public static String[] alphabeticalOrder(String[] s)
{
    //
    // Sort each individual string element by alphabetical order
    //
    for (int i = 0; i < s.length; i++)
    {
        String wordSt = s[i];
        char[] word = wordSt.toCharArray();
        Arrays.sort(word);
        s[i] = new String(word);
    }
    return s;
}

Звонок в основном это просто: String[] alphaOrder = alphabeticalOrder(dictionary);

Однако всякий раз, когда я запускаю программу, я получаю NullPointerException и я не могу понять, почему.

изменения s[i] в s[0] заставил меня пропустить ошибку, но мне нужно преобразовать все элементы в строке, а не только первый.

Что не так?

3 ответа

Это может произойти, только если ваш строковый массив имеет нулевые элементы, как прокомментировал Zavior.

Измените свой код на это:

public static String[] alphabeticalOrder(String[] s)
{
    //
    // Sort each individual string element by alphabetical order
    //
    for (int i = 0; i < s.length; i++)
    {
        String wordSt = s[i];
        if(wordSt == null) continue;

        char[] word = wordSt.toCharArray();
        Arrays.sort(word);
        s[i] = new String(word);
    }
    return s;
}

Из того, что я вижу, NullPointerEception может произойти, только если один из элементов пройден String массив null, Чтобы отладить его, просто сделайте нулевую проверку перед вызовом wordSt.toCharArray():

if (wordSt == null) {
    System.out.println("Null encountered at index: " + i + ". Skipping this element...");
    continue;
}
char[] word = wordSt.toCharArray();

Это поможет вам выяснить, что не так с вводом, и предпринять все необходимые шаги, чтобы предотвратить это, если это не ожидается.

Как все отмечали, вы можете столкнуться с NullPointerException, когда wordSt имеет значение null. Еще один момент, когда вы можете столкнуться с нулем, это когда String[] сам по себе равен нулю (редко, но возможно). Так что я бы предложил-

public static String[] alphabeticalOrder(String[] s)
{
    if(s == null || s.length == 0) return s;
    for (int i = 0; i < s.length; i++) {
        if(s[i] != null) {
            char[] word = s[i].toCharArray();
            Arrays.sort(word);
            s[i] = new String(word);
        }
    }
    return s;
}

Надеюсь это поможет.

Другие вопросы по тегам