排序字母数字值,不考虑字母



input ->"123","01","123 a","728 r","1234";输出应为01,123,123A,728R,1234

我尝试了下面的操作,但没有给出预期的操作。

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

一种解决方案可以从String中删除所有非数字值,然后进行比较。为了替换字符串中的非数字值,您可以使用以下regex:

str.replaceAll("[^\d.]", "") 
Collections.sort(input,
Comparator.comparingLong(s -> Long.parseLong(s.replaceFirst("^\D*(\d+).*$", "$1")));

仅用第一个数字组替换字符串。然后它解析一个长。在此基础上,用compare方法构造了比较器。

相关内容

最新更新