【问题标题】:sort Alphanumeric values regardless of letters排序字母数字值,而不考虑字母
【发布时间】:2021-11-10 12:51:43
【问题描述】:

输入 --> "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;
                }

【问题讨论】:

  • 这个getNumber()返回什么,v()返回什么?这个 searchSO 是从哪里来的?这里的实际输出是什么?

标签: java alphanumeric columnsorting


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    Collections.sort(input,
        Comparator.comparingLong(s -> Long.parseLong(s.replaceFirst("^\\D*(\\d+).*$", "$1")));
    

    这仅用第一个数字组替换字符串。然后它从中解析出很长的内容。由此,Comparator 使用 compare 方法构造。

    【讨论】:

    • 这给出了 java.lang.NumberFormatException: For input string: "123A"
    • @juwil replace 应该是 replaceFirst 因为 replaceFirstreplaceAll 是正则表达式替换。已更正。谢谢
    猜你喜欢
    • 2017-06-05
    • 2015-12-16
    • 2015-06-22
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 2021-10-20
    • 2014-05-05
    相关资源
    最近更新 更多