Java 为什么在下面的代码中会出现NullPointerException?
这是对现有文件内容进行排序的代码:Java 为什么在下面的代码中会出现NullPointerException?,java,nullpointerexception,Java,Nullpointerexception,这是对现有文件内容进行排序的代码: public void sortFile(String fileName)throws IOException { FileReader fin=new FileReader("C:\\File Handling\\"+fileName+".txt"); BufferedReader bin=new BufferedReader(fin); String[] str=new String[100]; int i=0;
public void sortFile(String fileName)throws IOException
{
FileReader fin=new FileReader("C:\\File Handling\\"+fileName+".txt");
BufferedReader bin=new BufferedReader(fin);
String[] str=new String[100];
int i=0;
while((str[i]=bin.readLine())!=null)
i++;
Arrays.sort(str); //getting a NullPointerException here
FileWriter fout=new FileWriter("C:\\File Handling\\"+fileName+".txt");
BufferedWriter bout=new BufferedWriter(fout);
PrintWriter pout=new PrintWriter(bout);
for(i=0;i<str.length;i++)
pout.println(str[i]);
}
public void sortFile(字符串文件名)引发IOException
{
FileReader fin=新的FileReader(“C:\\File Handling\\”+fileName+“.txt”);
BufferedReader bin=新的BufferedReader(fin);
字符串[]str=新字符串[100];
int i=0;
而((str[i]=bin.readLine())!=null)
i++;
Arrays.sort(str);//在此处获取NullPointerException
FileWriter fout=新的FileWriter(“C:\\File Handling\\”+fileName+“.txt”);
BufferedWriter bout=新的BufferedWriter(fout);
PrintWriter pout=新的PrintWriter(布特);
对于(i=0;i您应该尝试:
Arrays.sort(str, 0, i);
数组包含空字符串,这些字符串会导致NullPointerException。您应该尝试:
Arrays.sort(str, 0, i);
数组包含空字符串,这些字符串导致NullPointerException。这只是因为您首先声明一个100位数组,然后只填充一些(每行一个,直到文件有行),然后扫描所有100位
正如其他人已经指出的,第一次扫描是由Arrays.sort()在到达位置i时调用null元素上的compare()
str[i] == null
然后,由于对空数组项调用str[i].compare(),您将收到错误
要解决这个问题,您应该保存数组中放入多少行的计数,然后只需排序/循环直到该位置。
顺便说一句,在读取文件时,它已经存在于i变量中,只需存储它即可
int i=0;
int lineNumber=0;
while((str[i]=bin.readLine())!=null) {
lineNumber = i++;
}
请使用括号,它们将帮助您阅读和避免问题:)这只是因为您首先声明一个100位数组,然后只填充一些(每行一个,直到文件有行),然后扫描所有100位
正如其他人已经指出的,第一次扫描是由Arrays.sort()在到达位置i时调用null元素上的compare()
str[i] == null
然后,由于对空数组项调用str[i].compare(),您将收到错误
要解决这个问题,您应该保存数组中放入多少行的计数,然后只需排序/循环直到该位置。
顺便说一句,在读取文件时,它已经存在于i变量中,只需存储它即可
int i=0;
int lineNumber=0;
while((str[i]=bin.readLine())!=null) {
lineNumber = i++;
}
PS请使用括号,它们将在阅读和避免问题方面帮助您很多:)您预先定义了大小为100的字符串数组,默认情况下将所有100个元素初始化为null。现在,如果您说文件中有4行,那么其余96个元素将为null,只有您的4个元素将被初始化。然后对该数组进行排序时,会得到NullPointerException
这里有两个选项:
将字符串数组更改为列表并使用api,如:
Collections.sort(...);//pass your list
Arrays.sort(String array, startIndex, end Index);
或者使用数组,您可以使用api,如:
Collections.sort(...);//pass your list
Arrays.sort(String array, startIndex, end Index);
因此,在这里,您可以将0作为开始索引传递给yoru数组,而将i作为结束索引传递给yoru数组。但是,您在这里浪费了不必要的空间。您预先定义了大小为100的字符串数组,默认情况下,该数组将所有100个元素初始化为null。现在,如果您说文件中有4行,那么其余96个元素将为null,并且只有文件中的4个元素s将被初始化。然后,当您对该数组进行排序时,将得到NullPointerException
这里有两个选项:
将字符串数组更改为列表并使用api,如:
Collections.sort(...);//pass your list
Arrays.sort(String array, startIndex, end Index);
或者使用数组,您可以使用api,如:
Collections.sort(...);//pass your list
Arrays.sort(String array, startIndex, end Index);
因此,在这里,您可以将0作为开始索引传递给YRU数组,而将i作为结束索引传递给YRU数组。但是您在这里浪费了不必要的空间。哪一行出现异常?在哪一行出现错误?当您尝试使用数组按自然顺序排序时,您的数组可能包含初始化为null
的字符串。排序
内部类似于a.compareTo(b)
将被使用。如果a
为null
将抛出NullPointerException
。哪一行出现异常?哪一行出现错误?数组可能包含初始化为null
的字符串。当您尝试使用数组按自然顺序排序时。sort
internall将使用类似a.compareTo(b)
的内容。如果a
为null
aNullPointerException
将抛出。此信息不正确。当存在null元素时,它将打印null。System.out.print函数打印null?:obj.toString()@n如果你说得对,我就更改了答案,只留下了解决问题的方法。并将正确的一点归功于其他人。此信息不正确。当存在null元素时,它将打印null。System.out.print函数打印null?“null”:obj.toString()@如果你是正确的,我更改了答案,只留下了解决问题的方法。并将正确的答案归功于其他人。谢谢你的回答。我的程序的排序功能现在可以工作了。谢谢你的回答。我的程序的排序功能现在可以工作了。