栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java中包含数字的排序字符串

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中包含数字的排序字符串

尝试使用此比较器,该比较器将删除所有非数字字符,然后将其余字符与数字进行比较:

Collections.sort(strings, new Comparator<String>() {    public int compare(String o1, String o2) {        return extractInt(o1) - extractInt(o2);    }    int extractInt(String s) {        String num = s.replaceAll("\D", "");        // return 0 if no digits found        return num.isEmpty() ? 0 : Integer.parseInt(num);    }});

这是一个测试:

public static void main(String[] args) throws IOException {    List<String> strings = Arrays.asList("room1.2", "foo1.1", "foo", "room2.3", "room100.999", "room10", "room.3");    Collections.sort(strings, new Comparator<String>() {        public int compare(String o1, String o2) { return extractInt(o1) - extractInt(o2);        }        int extractInt(String s) { String num = s.replaceAll("\D", ""); // return 0 if no digits found return num.isEmpty() ? 0 : Integer.parseInt(num);        }    });    System.out.println(strings);}

输出:

[foo, room1, room2, room10, room100]

当数字为小数时(也表示Java 8+样式):

public static void main(String[] args) {    List<String> strings = Arrays.asList("room1.2", "foo1.1", "room2.3", "room100.999", "room10", "room.3");    Collections.sort(strings, Comparator.comparing(Application::extractDouble));    System.out.println(strings);}static double extractDouble(String s) {    String num = s.replaceAll("[^\d.]", "");    // return 0 if no digits found    return num.isEmpty() ? 0 : Double.parseDouble(num);}

结果:

[foo, room.3, foo1.1, room1.2, room2.3, room10, room100.999]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398216.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号