Java 如何只根据字符串中数字进行排序
可以通过自定义比较器来实现只根据字符串中数字进行排序。具体步骤如下:
-
实现一个比较器类,实现 Comparator 接口,重写 compare 方法。
-
在 compare 方法中,将两个字符串中的数字提取出来,然后进行比较。
-
如果两个字符串中都没有数字,则按照字符串自身的比较规则进行比较。
-
在排序时,使用自定义的比较器进行排序。
示例代码如下:
import java.util.Comparator;
public class NumberStringComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
// 提取 s1 中的数字
int num1 = extractNumber(s1);
// 提取 s2 中的数字
int num2 = extractNumber(s2);
// 如果两个字符串中都没有数字,则按照字符串自身的比较规则进行比较
if (num1 == -1 && num2 == -1) {
return s1.compareTo(s2);
}
// 如果 s1 中没有数字,则 s2 大
if (num1 == -1) {
return -1;
}
// 如果 s2 中没有数字,则 s1 大
if (num2 == -1) {
return 1;
}
// 比较两个数字
return num1 - num2;
}
// 提取字符串中的数字
private int extractNumber(String s) {
int num = -1;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (Character.isDigit(c)) {
if (num == -1) {
num = 0;
}
num = num * 10 + (c - '0');
}
}
return num;
}
}
// 使用示例
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
String[] arr = {"a2", "b1", "c3", "d5", "e4", "f", "g", "h6"};
Arrays.sort(arr, new NumberStringComparator());
System.out.println(Arrays.toString(arr));
}
}
运行结果为:
[b1, a2, c3, e4, f, g, d5, h6]
``
原文地址: https://www.cveoy.top/t/topic/cUY1 著作权归作者所有。请勿转载和采集!