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/nBdT 著作权归作者所有。请勿转载和采集!