使用compareTo来比较数字字符串是不是按计划工作,我该如何解决这个问题?

时间:2014-02-06 19:46:17

标签: java android string

The app itself running to show my issue

所以我试图通过使用2d字符串数组的第2列将它从最高值到最低值进行排序。

通过在线查看答案似乎很简单,我所要做的就是制作自己的比较器。

代码中的内容如下所示

        Arrays.sort(stockPriceAndNameSorted, new Comparator<String[]>() {
        @Override
        public int compare(final String[] entry1, final String[] entry2) {
            return entry1[1].compareTo(entry2[1]);
        }
    });

但正如你所看到的那样,它没有被按顺序排列,例如我给它的值1,2,3,4,5它可以正常工作。然而,将其更改为1,11,3,4,5并且它不能正常工作。

2 个答案:

答案 0 :(得分:0)

您比较了String值,这导致与数字顺序不同的顺序。比较整数值:

Arrays.sort(stockPriceAndNameSorted, new Comparator<String[]>() {
    @Override
    public int compare(final String[] entry1, final String[] entry2) {
        return Integer.valueOf(entry1[1]).compareTo(Integer.valueOf(entry2[1]));
    }
});

如果您的字符串中包含带小数点的数字,则可能需要将另一个数字类替换为Integer。此外,如果字符串值无法解析为数字,您可能希望处理可能出现的NumberFormatException

答案 1 :(得分:0)

按字母顺序排序,这对字符串有意义。您应该使用数字而不是字符串来表达您想要的内容。

或者,您可以这样做:

int price1 = Integer.parseInt(entry1[1]);
int price2 = Integer.parseInt(entry2[1]);
return Integer.compare(price1, price2);

但说实话,这感觉有点难看。

更好的方法是(我省略了吸气剂等):

class Item {
    String name;
    int price;
}

Item[] items = ...; //or use an ArrayList
Arrays.sort((stockPriceAndNameSorted, new Comparator<String[]>() {
    @Override
    public int compare(final Item entry1, final Item entry2) {
        return Integer.compare(entry1.price, entry2.price);
    }
});