本帖最后由 xiaanming 于 2012-12-12 10:46:58 编辑

解决方案 »

  1.   

    |---http
    |---ting
    |---baidu
    |---com
    |---song
    |---1670643
    |---http
    |---ting
    |---baidu
    |---com
    |---song
    |---1400921
    |---http
    |---ting
    |---baidu
    |---com
    |---song
    |---1263029
      

  2.   

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;
    public class CsdnTestSort {
        /**
         * 
         * @param file 文件内容以楼主给的例子相同。
         * @return
         * @throws Exception
         */
    public static List<String[]> loadFile(File file) throws Exception{
    //存放有几组数据。
     List<String[]> list = new ArrayList<String[]>();

    BufferedReader bfr =  new BufferedReader(new FileReader(file));

    String str = null;
    while(null!=(str=bfr.readLine())){
    String[] array = str.split("\\.");
    list.add(array); //读取一行作为一组数据。
    // System.out.println(array.length);
    }
    return list;
    }
    //得到有多少层,多一层前面就多两个空格
    public static void getSpace(int index){
    for(int i =0;i<index;i++){
    System.out.print("  ");
    }
    }
    public static void sortAll(List<String[]> list){
     //set用来存放每一组的,第一个元素。 
    Set<String> set =  new HashSet<String>();
    for(int i = 0; i<list.size();i++){
    String[] array = list.get(i);
        int number=array.length;
        int flag =0;//默认情况下是 头元素是没有重复的。
        //如果重复了,让flag变为1方面循环打印的时候不打印第一个元素。
        if(set.contains(array[0])){
         flag=1;
        }
        for(int j=flag;j<number;j++){
         getSpace(j);// 打印空格。
         System.out.print("|---"+array[j]);
         System.out.println();          
        }
        set.add(array[0]); //把头元素加入到set,就可以判断下一次是否有重复的头元素。
    }
    }
    public static void main(String[] args) throws Exception {
    sortAll(loadFile(new File("text.txt")));
    }
    }
      

  3.   

    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Set;public class CsdnTestSort {
        /**
         * 
         * @param file 文件内容以楼主给的例子相同。
         * @return
         * @throws Exception
         */
    public static List<String[]> loadFile(File file) throws Exception{
    //存放有几组数据。
     List<String[]> list = new ArrayList<String[]>();

    BufferedReader bfr =  new BufferedReader(new FileReader(file));

    String str = null;
    while(null!=(str=bfr.readLine())){
    String[] array = str.split("\\.");
    list.add(array); //读取一行作为一组数据。
    // System.out.println(array.length);
    }
    return list;
    }
    //得到有多少层,多一层前面就多两个空格
    public static void getSpace(int index){
    for(int i =0;i<index;i++){
    System.out.print("  ");
    }
    }
    public static void sortAll(List<String[]> list){
     //set用来存放每一组的,第一个元素。 
    Collections.sort(list,new DeComparator());
    Set<String> set =  new HashSet<String>();
    for(int i = 0; i<list.size();i++){
    String[] array = list.get(i);
        int number=array.length;
        int flag =0;//默认情况下是 头元素是没有重复的。
        //如果重复了,让flag变为1方面循环打印的时候不打印第一个元素。
        if(set.contains(array[0])){
         flag=1;
        }
        for(int j=flag;j<number;j++){
         getSpace(j);// 打印空格。
         System.out.print("|---"+array[j]);
         System.out.println();          
        }
        set.add(array[0]); //把头元素加入到set,就可以判断下一次是否有重复的头元素。
    }
    }
    public static void main(String[] args) throws Exception {
    sortAll(loadFile(new File("text.txt")));

    }
    } class DefineComparator implements Comparator{ @Override
    public int compare(Object o1, Object o2) {

    return 0;
    }
     
     }
     
     class DeComparator implements Comparator{ @Override
    public int compare(Object o1, Object o2) {
    String[] str1 = (String[])o1;
    String[] str2 = (String[])o2;
    return str1[0].compareTo(str2[0]);
    }

    }
    这是最完整的