java - 按字典顺序排序字符串数组,然后按数字排序(因为字符串包含数字)
问题描述
我有一个字符串,其中包含数字。我想对它进行排序,就像输出应该按字典顺序排序,然后最后根据数字排序。我已经通过以下方式完成了此操作,其复杂性非常大。有没有其他方法可以对此进行排序? 不想直接使用 Arrays.sort
预期输出 - [blue1, blue3, red3, red6]
public class SortStrings {
public static void main(String[] args) {
String a[] = { "blue3", "red6", "red3","blue1" };
String tmp;
for (int i = 0; i < a.length; i++) {
for (int j = i; j < a.length - i-1; j++) {
if (a[j].compareTo(a[j + 1]) > 0) {
tmp = a[j];
a[j] = a[j + 1];
a[j + 1] = tmp;
}
}
}
List<String> strings = Arrays.asList(a);
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(Arrays.toString(a));
}
}
解决方案
推荐阅读
- c# - 如何在后台加载场景/加载级别时隐藏黑屏
- javascript - 使用 HTMLAudioElement 时 useEffect 抛出 DOMException
- twitter-bootstrap - 默认情况下是否可以访问引导程序大纲样式?
- java - 如何修复“NotSerializableException:java.time.format.DateTimeFormatter”错误
- c# - 如何报告 PLINQ 查询的进度?
- python - 如何在 Maya 中选择重复对象上的特定边缘?
- iot - 实时 mqtt 消息是否将存储在同上解决方案中的 MongoDB 中?如何检查这些消息是否已存储?
- javascript - 如何从我的文本输入区域中删除“水果”值
- matlab - 如何在MATLAB中删除包含某些行中零的矩阵中的所有列
- appium - 由于 xcodebuild 失败,无法在真实设备中启动 appium:“xcodebuild failed with code 65”