有一个va.txt文件内容如下:
12,33,46,56,654,3
794,4,3839,604,43,33
79,34,383,604,431,332
212,2,462,56,654,23
需要将内容读取到vb.txt文件中,并且将每行的顺序按升序排列,且要实现每列按升序排列,并且不能将每行的值换到别的行中,必须保留在本行中。如:
2,23,56,212,462,654
4,33,43,604,794,3839
12,33,46,56,654,3222
34,79,323,332,431,604

解决方案 »

  1.   

    思路:
    1.先读一行一行的读取va.txt,把每一行存到list1中。
    2.每一行都有一个,号所有按,号截取成一个String数组并把此数组转换为int数组,并排序后组合成原来格式的字符串继续放到list2中
    3.在2步中列排序做好了,然后写一个比较器类,用于行之间的排序返回一个List
    4.得到第3步的list写入文件以下是代码:   import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class OrderFileNumber { /**
     * @param args
     */
    public static void main(String[] args) {
    OrderFileNumber ofn = new OrderFileNumber();
    List<String> list = ofn.readFile("c:/va.txt");
    List<String> orderList = ofn.sort(list);
    ofn.writeFile("c:/vb.txt", orderList);
    } /**
     * 读取文件内容,并放在一个list中
     * 
     * @param fileName
     *            文件名
     * @return
     */
    public List<String> readFile(String fileName) {
    List<String> list = null;
    BufferedReader br = null;
    try {
    InputStream is = new FileInputStream(fileName);
    InputStreamReader isr = new InputStreamReader(is);
    br = new BufferedReader(isr); // 得到一个bufferedReader
    // 为了方便设用readLine()方法
    list = new ArrayList<String>();
    String str = null;
    while ((str = br.readLine()) != null) {
    list.add(str);
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (br != null) {
    try {
    br.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    return list;
    } /**
     * 排序
     * 
     * @param list
     *            readFile方法得到的list
     * @return
     */
    public List<String> sort(List<String> list) {
    List<String> array = null;
    if (list != null) {
    array = new ArrayList<String>();
    for (int i = 0; i < list.size(); i++) { // 循环list
    String str = list.get(i);
    String[] strs = str.split(","); // 按,号截取,注意楼主给出的逗号是中文状态下的
    int[] ar = new int[strs.length];// new 一个int数组
    for (int j = 0; j < strs.length; j++) { // 把string数组转换为int数组
    ar[j] = Integer.parseInt(strs[j]);
    }
    Arrays.sort(ar); // 排 序int数组
    String s = "";
    for (int k = 0; k < ar.length; k++) { // 把数组重新组合成字符串楼主可以考虑用StringBuffer来拼接字符串
    if (k != ar.length - 1) {
    s = s + ar[k] + ",";
    } else {
    s = s + ar[k];
    }
    }
    array.add(s);
    Collections.sort(array, new MyComparator()); // 用下面的的内部类比较器排序
    }
    }
    return array;
    } /**
     * 写文件
     * 
     * @param fileName
     * @param list
     */
    public void writeFile(String fileName, List<String> list) {
    BufferedWriter bw = null;
    try {
    OutputStream os = new FileOutputStream(fileName);
    OutputStreamWriter osw = new OutputStreamWriter(os);
    bw = new BufferedWriter(osw);
    for (int i = 0; i < list.size(); i++) {
    bw.write(list.get(i));
    bw.newLine();
    }
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    if (bw != null) {
    try {
    bw.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    } /**
     * 创建内部类,用于每行之间的比较
     * 
     * @author student
     * 
     */
    public class MyComparator implements Comparator {
    public int compare(Object o1, Object o2) {
    String x = (String) o1;
    String y = (String) o2;
    String a = x.substring(0, x.indexOf(","));
    String b = y.substring(0, y.indexOf(","));
    if (Integer.parseInt(a) > Integer.parseInt(b)) {
    return 1;
    } else {
    return -1;
    }
    } }
    }
    呵呵,又复习了一下以前的知识
      

  2.   

    import java.util.*;
    import java.io.*;
    public class MatrixSort{
    public static void main(String[] args)throws Exception{
    sortFile("va.txt");
    }
    public static void sortFile(String fileName) throws Exception{
    Scanner scan=new Scanner(new FileInputStream(fileName));
    ArrayList<List<String>> lines=new ArrayList<List<String>>();
    String line=null;
    //读文件内容到lines
    //
    while(scan.hasNext()){
    line=scan.nextLine();
    lines.add(Arrays.asList(line.split("[,,]\\s*")));
    }
    scan.close();
    //对每一行排序:
    //
    for(List<String> oneLine:lines){
    Collections.sort(oneLine,new Comparator<String>(){
    public int compare(String str1,String str2){
    int i1=Integer.parseInt(str1.trim());
    int i2=Integer.parseInt(str2.trim());
    return i1-i2;
    }
    public boolean equals(Object o){
    return false;
    }
    });
    } //按列排序:
    //
    Collections.sort(lines,new Comparator<List<String>>(){
    public int compare(List<String> l1,List<String> l2){
    int i1=Integer.parseInt(l1.get(0).trim());
    int i2=Integer.parseInt(l2.get(0).trim());
    return i1-i2;
    }
    public boolean equals(Object o){
    return false;
    }
    }); //写文件:
    //
    BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("vb.txt"),"UTF-8"));
    for(List<String> li:lines){
    line=(""+li);
    line=line.substring(1,line.length()-1);
    bw.write(line,0,line.length());
    bw.newLine();
    }
    bw.flush();
    bw.close();
    }}
    vb.txt内容如下:
    2, 23 , 56, 212, 462, 654
    3 , 12, 33, 46, 56, 654
    4, 33 , 43, 604, 794, 3839
    34, 79, 332 , 383, 431, 604
      

  3.   

    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    public class paixu 
    {
      private String message[];
      private int message3[][];
      private int length;
      public void read()
      {
      String filename="e:/va.txt";
      try 
      {
    BufferedReader read=new BufferedReader(new FileReader(filename));
    message=new String[15];
    String line;
    int i=0;
    line=read.readLine();
    while(line!=null)
    {
    message[i]=line;
    i++;
    line=read.readLine();
    }
    read.close();
        length=i;
     } 
      catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
      }
    public void change()
    {
    message3=new int[length][];
    for(int i=0;i<length;i++)
    {
    String one=message[i].substring(0, message[i].length()-1);
    String message2[]=one.split(",");
        message3[i]=new int[message2.length];
        for(int z=0;z<message2.length;z++)
        {
         message2[z].trim();
        }
        for(int j=0;j<message2.length;j++)
        {
         message3[i][j]=Integer.parseInt(message2[j]);
        }
    }

    }
    public void pai()
    {
    for(int i=0;i<message3.length;i++)
    {
    for(int j=0;j<message3[i].length;j++)
    {
    int k=j;
    for(int z=j+1;z<message3[i].length;z++)
    {
        if(message3[i][z]<message3[i][k])
           k=z;
    }
    if(k!=j)
    {
    int c;
    c=message3[i][j];
    message3[i][j]=message3[i][k];
    message3[i][k]=c;
    }
    }

    }
    }
    public void show()
    {
    for(int i=0;i<message3.length;i++)
    {
    for(int j=0;j<message3[i].length;j++)
    System.out.print(message3[i][j]+" ");
    System.out.println();
    }
    }
    public static void main(String[] args)
    {
    paixu  xuexi=new paixu();
    xuexi.read();
    xuexi.change();
    xuexi.pai();
    xuexi.show();

    }
    }
      

  4.   


    public void smallProgram() throws IOException{
    File file = new File("src\\va.txt");
    List<String> linesList = FileUtils.readLines(file);
    List rows = new ArrayList<int[]>();
    for(int i=0; i<linesList.size(); i++){
    String[] noStrings = linesList.get(i).split(",");
    int[] row = new int[noStrings.length];
    for (int j = 0; j < noStrings.length; j++) {
    row[j] = Integer.parseInt(noStrings[j].trim());
    }
    Arrays.sort(row);
    rows.add(row);
    }

    System.out.println("====================================");
    for (int j = 0; j < rows.size(); j++) {
    for(int i=0; i<rows.size() - 1; i++){
    int f1 = ((int[])rows.get(i))[0];
    int f2 = ((int[])rows.get(i+1))[0];
    if(f1 > f2){
    int[] temp = (int[])rows.get(i);
    rows.set(i, rows.get(i+1));
    rows.set(i+1, temp);
    }
    }
    }

    System.out.println("====================================");
    List<String> resultList = new ArrayList<String>();
    for(int i=0; i<rows.size(); i++){
    int[] ints = (int[]) rows.get(i);
    StringBuffer line = new StringBuffer();
    for (int j = 0; j < ints.length; j++) {
    line.append(ints[j]);
    if(j < ints.length-1){
    line.append(",");
    }
    }
    resultList.add(line.toString());

    }
    File toFile = new File("src\\vb.txt");
    FileUtils.writeLines(toFile, "utf-8", resultList); }
      

  5.   


    我倒觉得你把功能分成一块一块的挺好的.
    我的排序效率不高,是对字符串排序,规则是转成int比较大小,一个可能要转好多次。应该在排序之前都转为int比较好.
      

  6.   

    楼上几位为何连代码都贴出来了。。唉,明显的作业题嘛。
    我觉得遇到此类问题需要分析一下,划分一下:
    1.此题需要什么技术?简单文件读写操作、数据类型的常用操作,排序
    2.这些技术自己都掌握么?
       如果不会操作文件,看书,或是直接上网搜java读写txt的例子,配通运行,学习理解,最后改写,掌握
       如果不会基本数据类型的常用操作,对不起,回头好好看看基础吧
       如果不会排序,也上网查查吧,什么冒泡排序,插入排序,二分排序,网上例子一大堆,自己把例子复制 下来,运行一下,单步走几遍,就能理解了,真的不难
    3.根据自己的情况一步步解决问题,不会排序,就先完成io部分,把va.txt读到内存中,尔后直接写出到vb.txt中,之后再去解决排序的问题。
    楼主建议你自己解决此问题吧,只要努力了,真的不难。