Java如何提取字符串数字并按字符串内time字段对数组升序排序
Java数组按time字段升序排序实现方案
我们可以直接使用Java内置的Arrays.sort()方法搭配自定义比较器实现需求,不需要手动编写排序循环,同时优化time字段提取逻辑,支持提取多位数的time值:
import java.util.Arrays; import java.util.Comparator; public class SortByTime { public static void main(String[] args) { String[] arr1={"sell 1, time 4, item 4", "buy 3, time 2, item 5"}; // 传入自定义比较器完成排序 Arrays.sort(arr1, new Comparator<String>() { @Override public int compare(String s1, String s2) { int time1 = extractTime(s1); int time2 = extractTime(s2); // 升序排序直接返回两个time的差值即可 return time1 - time2; } // 提取字符串中time字段的整数值 private int extractTime(String str) { // 定位到time字段后的数字起始位置 int timeStartIndex = str.indexOf("time") + 5; // 遍历找到数字结束的位置,支持提取两位数及以上的time值 int timeEndIndex = timeStartIndex; while (timeEndIndex < str.length() && Character.isDigit(str.charAt(timeEndIndex))) { timeEndIndex++; } String timeStr = str.substring(timeStartIndex, timeEndIndex); return Integer.parseInt(timeStr); } }); // 验证排序结果 System.out.println(Arrays.toString(arr1)); } }
运行后输出结果为:[buy 3, time 2, item 5, sell 1, time 4, item 4],和预期排序结果一致。
- 若业务场景可能存在无time字段的异常字符串,可在
extractTime方法中添加异常判断逻辑,避免下标越界或类型转换错误。 - 若需要降序排序,只需把比较器的返回值修改为
time2 - time1即可。
内容的提问来源于stack exchange,提问作者Hispalis Guadal
相关产品推荐
相关产品推荐

