我现在有一个需求,要求是这样的:
文件中有如下数据:
1,2,3,5,4
5,4,9,7,2
7,8,9,4,2
2,4,6,1,3
要求读取文件中的数据并进行排序,
第一道排序:先进行行排序,如第一行,排序后输出:1,2,3,4,5
第二道排序:进行列排序。第一列都要进行排序。
两道排序完成后的结果应该是这样的:
1,2,3,4,5
1,2,3,4,6
2,4,5,7,9
2,4,7,8,9
请各位高手帮帮忙,怎么写第二道排序的比较器啊??
我写的代码:public class AnalyseFile
{
    public List<String> analyse(String filePath)
    {
        List<String> list = new ArrayList<String>();
        BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
        String tempData = "";
        while((tempData = buffer.readerLine()) != null)
        {
             String[] strs = tempData.split(",");
             Arrays.sort(strs,new Comparator<String>()
             {
                 public int compare(String str1,Stirng str2)
                 {
                     return Integer.valueOf(str1)-Integer.valueOf(str2);
                 }
             });
             list.add();
        }
    }    public String arrayToString(String[] strs)
    {
        StringBuffer buffer = new StringBuffer();
        for(String str : strs)
        {
            buffer.append(str + ",");
        }
        return buffer.toString().substring(0,buffer.length());
    }    public List<String> sortList(List<String> list)
    {
        Collections.sort(list,new Comparator()
        {
            public int compare(String str1,String str2)
            {
                 return 1;//请各位大侠告诉我这个比较器该怎么写好???
            }
        });
    }    public void exportFile(String filePath,String exportPath)
    {
        PrintWriter out = new PrintWriter(exportPath);
        for(String str : sortList(analyse(filePath)))
        {
            out.println(str);
        }
        out.close();
    }    public void main(String[] args)
    {
        AnalyseFile af = new AnalyseFile()
        af.exportFile("./src/exam/data.txt","./src/exam/sortdata.txt");
    }
}代码是现写的,没有用Eclipse可能会有些错,但是最主要是那两个比较器,请高手帮我补上,谢谢了。

解决方案 »

  1.   

    你这里public List <String> sortList(List <String> list) 
        { 
            Collections.sort(list,new Comparator() 
            { 
                public int compare(String str1,String str2) 
                { 
                    return 1;//请各位大侠告诉我这个比较器该怎么写好??? 
                } 
            }); 
        } 
    Collections.sort也只是对list里面的string进行排序,而这个string是类似这样1,2,3,5,4的字符串,根本不能解决,必须把逗号隔开的数再分出来。还是转化为数组操作吧。
    public class TestFile {

    /**
     * @author Ydy form wyu
     * @param a
     * @param y
     * @return
     */
    public static int[][] sort(int[][] a,int y){
    for(int i=0;i<y;i++){
    Arrays.sort(a[i]);
    }
    for(int i=0;i<a[0].length;i++){//固定列
    int[] temp = new int[y];
    for(int j=0;j<y;j++){
    temp[j] = a[j][i];//建立临时数组,取列的数据
    }
    Arrays.sort(temp);
    for(int j=0;j<y;j++){
    a[j][i]=temp[j];//赋值回去
    }
    }
    return a;
    }



    public static void main(String args[])
    {
    int[][] a= {
    {1,2,3,5,4},
    {5,4,9,7,2},
    {7,8,9,4,2},
    {2,4,6,1,3}};
    System.out.println(Arrays.deepToString(a));
    sort(a,4);
    System.out.println(Arrays.deepToString(a));
    }
    }
      

  2.   

    我试了一下,用比较器也是可以做到的,而且还比较简单:
        public List <String> sortList(List <String> list) 
        { 
            Collections.sort(list,new Comparator() 
            { 
                public int compare(String str1,String str2) 
                { 
                    String[] strs1 = str1.split(",");
                    String[] strs2 = str2.split(",");
                    int length = strs1.length > strs2.length ? strs2.length : strs1.length;
                    for(int i = 0; i < length ; i++)
                    {
                        if(!strs1[i].trim().equlse(strs2[i].trim()))
                        {
                            return Integer.valueOf(strs1[i] - strs2[i]);  
                        }
                    }                return 0;//如果没有不同的直接返回相等            } 
            }); 
        }
      

  3.   

    没有用到Comparator
    直接用数组排序的
    运行结果正确。/**
    分别对一个二维数组的行和列进行排序。
    比如:
    1,2,3,5,4 
    5,4,9,7,2 
    7,8,9,4,2 
    2,4,6,1,3 
    */import java.util.*;public class ArraySort {
    public static void main(String[] args) {
    int[][] myArray = {
    {1,2,3,5,4},
          {5,4,9,7,2},
          {7,8,9,4,2},
          {2,4,6,1,3}
    };

    int[][] temp = getArray(myArray);

    System.out.println("对每行排序后的结果:");
    mySort(myArray);
    System.out.println("对每列排序后的结果:");
    mySort(temp);

    }

    public static void mySort(int[][] a) {
    int rows = a.length;
    int cols = a[0].length;
    for(int i=0;i<rows;i++) {
    Arrays.sort(a[i]);
    for(int j=0;j<cols;j++) {
    System.out.print(a[i][j] + " ");
    }
    System.out.println();
    }
    }

    public static int[][] getArray(int[][] a) {
    int rows = a.length;
    int cols = a[0].length;

    int[][] temp = new int[cols][rows];

    for(int i=0;i<cols;i++) {
    for(int j=0;j<rows;j++) {
    temp[i][j] = a[j][i];
    }
    }
    return temp;
    }
    }