蝴蝶刀刀
简答是的。您需要一个自定义字符串比较器。解决方案假设您需要对字符串列表进行排序:[a_123, ab123, a123, 123, _123]如果您使用排序,Collections.sort那么它将按以下顺序排序:[123, _123, a123, a_123, ab123]但是您想覆盖_. 为此,您需要一个自定义字符串比较器。让我们复制和修改一下java.lang.String#compareTo:private int customStringComparator(String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); int lim = Math.min(len1, len2); char v1[] = s1.toCharArray(); char v2[] = s2.toCharArray(); int k = 0; while (k < lim) { char c1 = v1[k]; char c2 = v2[k]; // You can add your custom comparison here: if ('_' == c1 && Character.isDigit(c2)) { // We intentionally return inverted result return c2 - c1; }else if(c1 != c2) { return c1 - c2; } k++; } return len1 - len2;}现在我们可以将我们的传递customStringComparator给Collections.sort:Collections.sort(list, this::customStringComparator);该列表将按以下顺序排序:[_123, 123, a_123, a123, ab123]如您所见,现在_前面的数字。