0

我必须编写一个从文件中读取字典单词列表的程序。随后,将每个单词的字符按字母顺序排列并存储在原始数组中。(例如:蝙蝠侠会变成 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;
}

main 中的调用很简单:String[] alphaOrder = alphabeticalOrder(dictionary);

但是,每当我运行该程序时,我都会得到一个NullPointerException并且我似乎无法弄清楚为什么。

更改s[i]s[0]让我跳过错误,但我需要转换字符串中的所有元素,而不仅仅是第一个。

出了什么问题?

4

3 回答 3

1

正如 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;
}
于 2013-09-28T18:35:33.173 回答
0

据我所知,NullPointerEception只有当传递String数组的元素之一是null. 要调试它,只需在调用之前进行一次空检查wordSt.toCharArray()

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

这将帮助您找出输入有什么问题,如果这不是预期的,请采取任何必要的步骤来防止它。

于 2013-09-28T18:31:18.820 回答
0

正如大家所指出的,当 wordSt 为 null 时,您可能会遇到 NullPointerException。您可能会遇到 null 的另一点是 String[] s 本身为 null 时(罕见但可能)。所以我建议——

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;
}

希望这可以帮助。

于 2013-09-28T18:51:22.453 回答