无论字母如何,对字母数字值进行排序

sort Alphanumeric values regardless of letters

输入 --> "123","01","123A","728R","1234" 输出应该是 01,123,123A,728R,1234

我尝试了以下但没有给出预期的 OP。

public int compare(SO o1, SO o2) {
                    if(o1.getnumber() != null && o2.getnumber()!=null) {
                        if (NumberUtils.isNumber(o1.getnumber()) &&
                                NumberUtils.isNumber(o2.v())) {
                            Long val1 = Long.valueOf(o1.getnumber());
                            Long val2 = Long.valueOf(o2.getnumber());
                            if ("asc".equals(searchSO.getSortOrder())) {
                                return (val1.compareTo(val2));
                            } else if ("desc".equals(searchSO.getSortOrder())) {
                                return (val2.compareTo(val1));
                            }
                        }
                        else{
                            if ("asc".equals(searchSO.getSortOrder())) {
                                return (o1.getnumber().compareTo(o2.getnumber()));
                            } else if ("desc".equals(searchSO.getSortOrder())) {
                                return (o2.getnumber().compareTo(o1.getnumber()));
                            }
                        }
                    }
                    return 0;
                }
Collections.sort(input,
    Comparator.comparingLong(s -> Long.parseLong(s.replaceFirst("^\D*(\d+).*$", "")));

这将仅用第一个数字组替换字符串。然后它从中解析一个 long 。 Comparator 是用 compare 方法构建的。

一个解决方案是从字符串中删除所有非数字值,然后进行比较。为了替换字符串中的非数字值,您可以使用以下正则表达式:

str.replaceAll("[^\d.]", "")