2013-03-01 159 views
2

我需要按降序对整数值排序String[]。我使用String [],因为数组的内容可以是字符串或整数。使用Collections.reverseOrder()排序字符串[]

排序降序排列,

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

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

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

我看到Collections.reverseOrder()不适用于原始类型,但由于我使用的是String[]而不是int[],它会属于该类别吗?

如果是这样,我们有一个排序机制,而不是使用for循环吗?

+0

你是说这个数组包含'String'和'Integer'实例(不应该用'String []'来实现),或者它包含*整数的字符串。 ''14“','”0“','”3“'? – 2013-03-01 11:39:53

+0

是的,该数组包含整数字符串值“14”,“0”,“3” – aradhak 2013-03-01 11:41:04

+0

而问题是,他们没有按正确的顺序排序? – 2013-03-01 11:43:24

回答

2

该要求非常具体且不寻常,当然,它没有标准的方法。但是你可以提供自定义的比较:

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

而且你必须决定做什么,如果一个字符串具有不可分析整数和处理NumberFormatException

+0

感谢您的回复。所以我使用了一个if循环来查看输入字符串是否包含一个整数,并且是if(rows [0] .matches(“\\ d +”)){Arrays。排序(行,新比较器()...}。 – aradhak 2013-03-01 12:12:17

0

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

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

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

0

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

你需要通过一个自己的比较器女巫将字符串转换为整数,然后再比较它们,或者使用整数形式,以便它们具有相同数量的数字并导致0

如果在同一个数组中有一个字符串作为字符串,而不能获得有序的数字。