有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

用java中的比较器为每列排序2D数组

我创建了一个工作o表,用该表为2D数组排序。使用自定义比较器的排序方法

String[] array=new String[]{
"a b c",
"a",
"a b",
"a c"};

我希望输出也如下所示

{"a",
 "a b",
 "a b c",
 "a c"}

比较器的比较方法如下所示

public int compare(String arg0, String arg1) {
    String[] tempArray0 = arg0.split(" +");
    String[] tempArray1 = arg1.split(" +");

if (!arg0.isEmpty() && !arg1.isEmpty())

    {
        return sortStrings(tempArray0[0], tempArray1[0]);
    }

SortString方法如下所示

 private int sortStrings(String arg0, String arg1) {
    if (arg0.toLowerCase().compareTo(arg1) > 0) {
        return 1;
    } else if (arg0.toLowerCase().compareTo(arg1) < 0) {
        return -1;
    } else {
        return 0;
    }

}

如果只想按第一列排序,这个问题非常有效,但对我来说,有必要检查该列是否具有相同的值,它应该对下一列排序,以此类推

我知道,在这种情况下,我需要捕获IndexOutOfBounds异常,因为数组中的一个元素(后来被划分为2D数组)有不同大小的行

我遇到了一个问题,因为我不知道这里应该使用什么样的循环结构


共 (1) 个答案

  1. # 1 楼答案

    试试这个

    String[][] array = new String[][] { { "a", "b", "c" }, { "a" }, { "a", "b" }, { "a", "c" } };
    
            Arrays.sort(array, new Comparator<String[]>() {
                @Override
                public int compare(String[] o1, String[] o2) {
    
                    for (int i = 0; i < o1.length; i++) {
    
                        if (o2.length == i) return 1;
    
                        int comp = o1[i].compareTo(o2[i]);
    
                        if (comp != 0)
                            return comp;   
                    }                           
                    return -1;
                }
            });
    

    应打印:

    a
    ab
    abc
    ac