按字母顺序对字符串数组中的各个元素进行排序

时间:2013-09-28 18:24:56

标签: java arrays sorting alphabetical

我必须编写一个程序,从文件中读取字典单词列表。 随后,每个单词的字符按字母顺序排列并存储在原始数组中。 (例如:蝙蝠侠会变得无用)。 现在,这是我到目前为止所做的:

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 个答案:

答案 0 :(得分:1)

只有当您的字符串数组具有null元素时才会发生这种情况,如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;
}

答案 1 :(得分: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();

这将帮助您找出输入有什么问题,并采取任何必要的步骤来防止这种情况发生。

答案 2 :(得分: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;
}

希望这有帮助。