2013-09-28 30 views
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; 
} 

主通话很简单:String[] alphaOrder = alphabeticalOrder(dictionary);

但是,每当我运行程序时,我收到了,我似乎NullPointerException不能找出原因。

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

什么问题?

+3

是否有可能传入的字符串数组有空值? – Zavior

+0

嗯...我只是想到了。如果我将数组大小调整到最后一个String val,是否可以防止此错误发生? – Joseph

回答

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(); 

这将帮助你弄清楚什么是错的输入,并采取任何必要措施来阻止它,如果这不是预期。

+0

他也可以输出到'System.err',因为这是更多的警告:) –

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

正如每个人所指出的那样,你可能会遇到NullPointerException异常时wordSt为null。你可能遇到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; 
} 

希望这会有所帮助。

+0

谢谢大家的帮助。问题在于几个nulls传入的infile,所以我只是写了一个resize方法来解决这个问题,摆脱了空值和错误。 – Joseph

相关问题