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在忽略撇号的同时对列表进行排序_Java_Sorting_Csv - Fatal编程技术网

Java在忽略撇号的同时对列表进行排序

Java在忽略撇号的同时对列表进行排序,java,sorting,csv,Java,Sorting,Csv,我有一个正在排序的列表,它正在从CSV文件中读取 现在,当我对代码进行排序时,我得到: 但如果我在Excel上对CSV文件进行排序,结果会略有不同 因此,从技术上讲,Excel忽略了撇号的情况,但我的不是。标准没有指定在这种情况下要做什么,但是我假设我的代码是不正确的。我怎么能忽略撇号的大小写而继续下一个字符呢 我的代码是: public static Comparator<Hill> compareName = new Comparator<Hill>() {

我有一个正在排序的列表,它正在从CSV文件中读取

现在,当我对代码进行排序时,我得到:

但如果我在Excel上对CSV文件进行排序,结果会略有不同

因此,从技术上讲,Excel忽略了撇号的情况,但我的不是。标准没有指定在这种情况下要做什么,但是我假设我的代码是不正确的。我怎么能忽略撇号的大小写而继续下一个字符呢

我的代码是:

public static Comparator<Hill> compareName = new Comparator<Hill>() {
    public int compare(Hill one, Hill other) {
        return one.name.compareTo(other.name);
    }
};

public static void exercise5d() {
    List<Hill> hills = readHills();
    for (int i = 0; i < 20; i++) {
        Collections.sort(hills, Hill.compareName);
        System.out.println(hills.get(i));
    }

}
公共静态比较器compareName=新比较器(){
公共整数比较(一号山,另一号山){
返回一个.name.compareTo(其他.name);
}
};
公共静态无效练习5d(){
List hills=readHills();
对于(int i=0;i<20;i++){
集合.排序(Hill,Hill.compareName);
System.out.println(hills.get(i));
}
}
在比较器中

替换

返回一个.name.compareTo(其他.name)


返回一个.name.replaceAll(“,”).compareTo(其他.name.replaceAll(“,”)

我假设
Hill.name
是一个
字符串

在比较器中,您可以在替换撇号后比较
字符串
s,如下所示:

public int compare(Hill one, Hill other) {

        return one.name.replaceAll("'", "").compareTo(other.name.replaceAll("'","");
    }

但你认为你不想考虑<代码> <代码>?< /P>不完全是这样,尽管它固定了我的第一个条目,撇号在开始时,它仍然在打印撇号之后的那些词,你可能还想要<代码> CoprastoNeXeCase< /Cord> @ GoyLyPython,在这种情况下,您可能希望显示您的

Hill
类。@AJNeufeld,不,您不希望在对字符串排序时忽略大小写。虽然此代码解决了这个问题,但它也非常占用CPU和垃圾。至少,请考虑使用<代码>替换<代码>,而不是<代码> RePraseB<代码>。根据列表的大小,最好编写一个自定义比较器,逐字符比较两个字符串,忽略
,并将字符升格。最终,您可能需要对列表进行预处理。Java代码正是按照您的要求执行的,您让它执行与Excel不同的操作。要做的事情是找出Excel用来比较两个元素的内容,并在代码中包含该逻辑,而到目前为止您还没有这样做。如果Excel需要忽略撇号,不要期望不忽略它们的代码匹配。按照@VHS的回答,编写代码来忽略它们。这是我不能完全确定的,因为我从Java和excel中得到了两种不同的排序结果。因为我有一个条目“Abberley”。这不在名单上,因为阿宾出现了。