[英]How to sort an array of strings by everything but the first letter
对于任何字母AZ
和数字1-26
我的数组预计具有类似于"B1"
和"C22"
元素。 我需要对这个数组进行数字排序,所以我们在排序时不考虑字符串的第一个字符。 这样一个数组{"B1", "A22", "C9"}
将被排序为{"B1", "C9", "A22"}
。
我试图取一个子字符串,但它不起作用,因为我不知道哪些字符串的长度为 3,哪些字符串的长度为 2。
您可以创建自己的比较器来忽略某些字符:
Arrays.sort(s, new MyComparator());
System.out.println(Arrays.toString(s));
class MyComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
// Remove the chars you are want to ignore from o1, o2
o1 = o1.substring(1);
o2 = o2.substring(1);
return Integer.compare(Integer.parseInt(o1),Integer.parseInt(o2));
// return o1.compareTo(o2); see petr note bellow
}
}
如果数组包含大量元素,则可以将Arrays.sort()
替换为Arrays.parallelSort()
以进行高效排序。
Arrays.sort(arr,
(ele1, ele2) -> ele1.substring(1).compareTo(ele2.substring(1)));
如果您确信substring(1)
只包含数值,那么您可以按如下方式排序:
Arrays.sort(arr, (Comparator.comparingInt(element ->
Integer.parseInt(element.substring(1)))));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.