java字符串包含连续数字,Java中包含数字的排序字符串

小编典典

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

Collections.sort(strings, new Comparator() {

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 strings = Arrays.asList("room1.2", "foo1.1", "foo", "room2.3", "room100.999", "room10", "room.3");

Collections.sort(strings, new Comparator() {

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 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]

2020-09-08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值