【发布时间】:2018-09-04 03:47:13
【问题描述】:
在我的 Java 程序中,我有以下代码:
String[] states = readFile("States.txt");
System.out.println(String.join(" ", states));
System.out.println(states.length);
Arrays.sort(states);
System.out.println(String.join(" ", states));
System.out.println(states.length);
奇怪的是,从java.util.Arrays 调用Arrays.sort() 会导致从列表中删除许多项目。当我运行上面的代码时,这是输出:
FL GA SC NC VA MD NY NJ DE PA CT RI MA VT NH ME AL TN KY WV OH MI MS AR MO KS NE IN IL WI MN LA TX OK IA SD ND NM CO WY ID AZ UT NV MT CA OR WA AL HI
50
AL AL AR AZ CA CO CT DE FL GA HI
50
我对这里发生的事情非常非常困惑。为什么只打印出 11 个项目? Arrays.sort() 是否正在删除项目?为什么Arrays.sort() 会这样做?为什么数组的大小还是50?项目是空白还是什么?
我假设我的 readFile() 方法工作正常,因为未排序的数组打印得很好......
public static String[] readFile(String FileName) {
char[] cbuf = new char[200];
String[] array;
FileReader fr;
try {
fr = new FileReader(FileName);
try {
fr.read(cbuf);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String all = new String(cbuf);
array = all.split("\n");
return array;
}
我正在读取的文件:https://nofile.io/f/8TO3pdnmS3W/States.txt MD5 以 8b961b5 开头
【问题讨论】:
-
Smth 是非常错误的,如果你得到你的数组并且它输出所有状态,但是在 Arrays.sort() 之后它不会 - 不可能:) 你为什么不在排序之前和之后调试你的代码() fn?
-
使用
String[] states = "FL GA SC NC VA MD ...".split(" ");没有问题。检查split("\n");是否适用于文件中的所有数据(例如,没有任何\r\n分隔符)。 -
@AaronFranke,那么您的日志正在截断输出! Arrays.toString() 将起作用。去检查截断。
-
我怀疑数据文件中有^Z。
-
学习使用调试器是必不可少的,试着把它放在你的待办事项清单上。它将为您节省数小时的痛苦和困惑。 trim() 起作用的原因是你的字符串在末尾有一堆空字符值,因为你的缓冲区比你的输入长,并且 trim() 删除了它们。最好使用较小的缓冲区,或者至少检查 fr.read() 的返回值以查看您读取了多少个字符,并在将其转换为字符串时使用该知识。
标签: java arrays string sorting