样本数据集将是:
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;