在java中使用collection.sort对字符串进行排序
我是Java初学者,对字符串排序有问题。我知道使用在java中使用collection.sort对字符串进行排序,java,sorting,collections,Java,Sorting,Collections,我是Java初学者,对字符串排序有问题。我知道使用Collections.sort默认情况下会对字符串进行区分大小写的排序,但大写字母总是排在前面,因为它总是比较ASCII值 如果我想将小写字符串放在大写字符串之前,是否有一种干净的方法可以在Java中使用Collections.sort 例如,将“java Python ruby C”排序为“java ruby C Python” 提前感谢。当然你可以使用比较器。使用集合。排序(列表x,比较器comp)当然你可以使用比较器。使用集合。排序(列表
Collections.sort
默认情况下会对字符串进行区分大小写的排序,但大写字母总是排在前面,因为它总是比较ASCII值 如果我想将小写字符串放在大写字符串之前,是否有一种干净的方法可以在Java中使用Collections.sort
例如,将“java Python ruby C”排序为“java ruby C Python”
提前感谢。当然你可以使用比较器。
使用集合。排序(列表x,比较器comp)
当然你可以使用比较器。使用集合。排序(列表x,比较器comp)
你应该实现你自己的来定义这样的排序:
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);
}
});
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
如果(/*s1为小写,s2为大写*/){
返回1;
}
如果(/*s1为大写,s2为小写*/){
返回-1;
}
返回s1.compareTo(s2);
}
});
您应该实现自己的功能来定义此类排序:
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);
}
});
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
如果(/*s1为小写,s2为大写*/){
返回1;
}
如果(/*s1为大写,s2为小写*/){
返回-1;
}
返回s1.compareTo(s2);
}
});
这是通过创建一个比较器来实现的,该比较器将推动比较
方法
下面是使用AgeComarator的示例:
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;
}
}
有关比较器和Comparable的更多信息可以阅读。这是通过创建一个比较器来实现的,该比较器将推动比较方法
下面是使用AgeComarator的示例:
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(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);
}
};
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
if(s1.toLowerCase().equals(s1)和&s2.toUpperCase().equals(s2)){
返回1;
}
if(s1.toUpperCase().equals(s1)和&s2.toLowerCase().equals(s2)){
返回-1;
}
返回s1.compareTo(s2);
}
};
阿尔沙吉的答案是肯定的。以下是两个次要的条件语句:
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);
}
};
Collections.sort(列表,新比较器(){
@凌驾
公共整数比较(字符串s1、字符串s2){
if(s1.toLowerCase().equals(s1)和&s2.toUpperCase().equals(s2)){
返回1;
}
if(s1.toUpperCase().equals(s1)和&s2.toLowerCase().equals(s2)){
返回-1;
}
返回s1.compareTo(s2);
}
};
谢谢arshajii。更进一步,如果单词包含所有小写字符的字符串、所有大写字符或仅第一个字符中的大写字符,我需要逐个检查吗?@Jimmy是的,可能最好逐个检查。谢谢arshajii。如果单词包含所有小写字符的字符串,请进一步检查,所有大写字符或仅第一个字符中的大写字符,我需要逐个检查吗?@Jimmy是的,可能最好逐个检查。谢谢这里的实现。谢谢这里的实现。谢谢。这也是一个好的,我可以用于更复杂的字符。谢谢。这也是一个好的,我可以用于更复杂的。