如何在Java中对可能的字母数字数组进行排序?

时间:2014-06-25 17:28:32

标签: java sorting arraylist alphanumeric

样本数据集将是:

ArrayList<String> a = new ArrayList<String>();
    a.add("5");
    a.add("10.5a");
    a.add("4");
    a.add("4c");
    a.add("4a");
    a.add("10.6a");
    a.add("3");

我正在寻找输出格式为[3,4,4a,4c,5,10.5a,10.6a]。

Java的排序函数(Collections.sort(a);)将数据集排序为[10.5a,10.6a,3,4,4a,4c,5]。

所以,我需要一种方法来从字母中分割出数字的值,然后先按数字排序(10之前为4),然后按字母排序,数字前面有一个数字(4a之前为4)。

这与stackoverflow上的其他问题不同的主要方式是数字和字母字符之间没有分隔符 - 字符串不能在特定字符处拆分。

Alphanum Algorithm by Dave Koelle返回[3,4,4a,4c,5,10.6a,10a,10b] - 10.6a应该在10a之后。

解决

在前几行中,将第一个int从48更改为46,它接受“ - ”和“。”。将数字与字母分开时,字符为数字。它也使得数字现在可以有小数而且是负面的,如果你的数据使用。或者作为非数字字符,它会弄乱结果。

public class AlphanumComparator implements Comparator<String>
{
    private final boolean isDigit(char ch)
    {
        return ch >= 46 && ch <= 57;

0 个答案:

没有答案