Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用collection.sort对字符串进行排序_Java_Sorting_Collections - Fatal编程技术网

在java中使用collection.sort对字符串进行排序

在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)当然你可以使用比较器。使用集合。排序(列表

我是Java初学者,对字符串排序有问题。我知道使用
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是的,可能最好逐个检查。谢谢这里的实现。谢谢这里的实现。谢谢。这也是一个好的,我可以用于更复杂的字符。谢谢。这也是一个好的,我可以用于更复杂的。