Сортировка отдельных элементов в массиве строк по алфавиту
Я должен написать программу, которая читает список слов словаря из файла. Впоследствии символы каждого слова располагаются в алфавитном порядке и сохраняются в исходном массиве. (Например: Бэтмен станет 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;
}
Надеюсь это поможет.