要实现这个功能,你可以使用Java中的Collections.sort()方法,结合自定义的比较器(Comparator)。这个比较器首先会比较字符串中的数字部分,如果数字相同,则会比较字母部分。以下是一个示例代码:
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortStringByNumberAndLetter {
public static void main(String[] args) {
List<String> strings = Arrays.asList("10a", "2b", "10c", "1d");
Collections.sort(strings, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
// 提取数字部分并转换为整数
int num1 = Integer.parseInt(s1.replaceAll("\\D", ""));
int num2 = Integer.parseInt(s2.replaceAll("\\D", ""));
// 首先比较数字部分
if (num1 != num2) {
return num1 - num2;
}
// 如果数字相同,则比较字母部分
return s1.compareTo(s2);
}
});
System.out.println(strings);
}
}
这段代码首先定义了一个字符串列表,然后使用Collections.sort()方法对其进行排序。排序逻辑是通过一个匿名内部类实现的Comparator接口来定义的。在这个比较器中,我们首先使用正则表达式\\D(匹配任何非数字字符)来提取字符串中的数字部分,并将其转换为整数。然后,我们比较这两个数字。如果数字不相同,就根据数字的大小进行排序。如果数字相同,我们就使用字符串的自然顺序(即字典顺序)来比较字母部分。