我是Java的初学者,我在排序String时遇到了问题。我知道使用Collections.sort
它会在默认情况下对区分大小写的String进行排序,但大写的总是在前面,因为它总是比较ASCII值。
如果我想将小写字符串保留在大写字符串前面,是否有一种使用Collections.sort
在Java中实现它的简洁方法?
例如,将“java Python ruby C”排序为“java ruby C Python”。
提前致谢。
答案 0 :(得分:3)
您应该实现自己的Comparator
来定义这样的排序:
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (/* s1 is lower case and s2 is upper case */) {
return 1;
}
if (/* s1 is upper case and s2 is lower case */) {
return -1;
}
return s1.compareTo(s2);
}
});
答案 1 :(得分:0)
当然你可以使用比较器。Use Collections.sort(List<String> x,Comparator comp)
答案 2 :(得分:0)
这可以通过创建Comparator
来实现compare
方法。
以下是使用AgeComparator的示例:
import java.util.Comparator;
public class HeightComparator implements Comparator<Object> {
@Override
public int compare(Object o1, Object o2) {
int p1 = ((Person)o1).height;
int p2 = ((Person)o2).height;
return p1 - p2;
}
}
现在剩下的就是将我们的自定义比较器传递给我们想要比较的集合。
Collections.sort(peoples, new AgeComparator())
有关Comparators和Comparable的更多信息,请参阅HERE。
答案 3 :(得分:0)
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.toLowerCase().equals(s1) && s2.toUpperCase().equals(s2)) {
return 1;
}
if (s1.toUpperCase().equals(s1) && s2.toLowerCase().equals(s2)) {
return -1;
}
return s1.compareTo(s2);
}
};