2

我需要String[]按降序对整数值进行排序。我使用 String[] 因为数组的内容可以是字符串或整数。

要按降序排序,

Arrays.sort(rows, Collections.reverseOrder());

其中行包含"14","0","3";

如果 string[] 包含单词,则排序工作正常。

我读到这Collections.reverseOrder()不适用于原始类型,但是由于使用String[]而不是,这是否属于该类别int[]

如果是这样,除了使用 for 循环之外,我们还有排序机制吗?

4

4 回答 4

2

要求非常具体和不寻常,当然,没有标准的方法。但是您可以提供一个自定义比较器:

Arrays.sort(rows, new Comparator<String>()
{
    public int compare(String o1, String o2)
    {
         return Integer.parseInt(o2) - Integer.parseInt(o1);
    }
});

如果字符串具有不可解析的整数并处理NumberFormatException.

于 2013-03-01T11:45:03.323 回答
1

问题是字符串的自然顺序与数字的自然顺序不同:"1" < "11" < "2"1 < 2 < 11. 这是编写自己的比较器的问题:

    Arrays.sort(rows, new Comparator<String>() {
        public int compare(String o1, String o2) {
            return -(Integer.parseInt(o1) - Integer.parseInt(o2));
        }
    });

它将使用每个字符串的整数值 - 如果任何字符串不是整数,它将崩溃 - 并且它会给出相反的顺序,因为它返回-正常值。它也是低效的,因为它在每次比较中解析每个字符串。

于 2013-03-01T11:46:08.417 回答
0

如果要按数字顺序排序,则需要数字类型,而不是String. 您可以创建一个数组Integer并对其进行排序。

于 2013-03-01T11:45:32.003 回答
0

排序是使用按字母顺序排列的字符串完成的。字符串"3"大于,"14"因为 char'3'大于 char '1'(以相反的顺序)。

您需要传递一个自己的比较器,在比较它们之前将字符串转换为整数,或者让整数格式化,以便它们具有相同的位数和前导0

如果在同一个数组中有一个数字作为字符串,那么您无法将数字排序为数字。

于 2013-03-01T11:47:04.803 回答