繁体   English   中英

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

[英]Sorting individual elements in a String Array by their alphabetical order

我必须编写一个程序来从文件中读取字典单词的列表。 随后,每个单词的字符按字母顺序排列并存储在原始数组中。 (例如:《蝙蝠侠》将变成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]使我跳过了错误,但是我需要转换String中的所有元素,而不仅仅是第一个。

怎么了?

正如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数组的元素之一为nullNullPointerEception才会发生。 要调试它,只需在调用wordSt.toCharArray()之前执行空检查:

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

这将帮助您找出输入的问题,并采取任何必要的步骤来防止这种情况(如果这不是预期的话)。

正如每个人都指出的那样,当wordSt为null时,您可能会遇到NullPointerException。 还有一个可能遇到null的地方是String []本身为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;
}

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM