2017-09-13 47 views
-3

我必須按特定格式排序我的文本文件。 我的文件:排序樹格式文件

AAAA 
    BBBB 
     CCCC 
     CCCC 
     CCCC 
AAAA 
    BBBB 
     CCCC 
    BBBB 
     CCCC 

我不得不排序分別AAAA (first)BBBB (second)AAAACCCC (third)BBBB但我不知道如何做到這一點。我知道在AAAA,0 BBBB,CCCC之間有4個空格。

我可以解析它爲JSON,我認爲這將工作,但也許有一些簡單的方法來排序該文件。你能給我一些想法嗎?

我看了一下整個AAAA段但裏面有什麼?

結果不一定要與空間(如示例),但它的視覺效果更好。

請給我你的意見。

例子:

Def 
    Abc 
     Xyz 
     Ghi 
     Def 
Abc 
    Def 
     Xyz 
    Abc 
     Abc 

我的程序的輸出:

Abc 
    Abc 
     Abc 
    Def 
     Xyz 
Def 
    Abc 
     Def 
     Ghi 
     Xyz 

編輯:名稱AAAA,BBBB,CCCC將永遠是相同的。

+2

我不知道你在問什麼。你期待什麼輸出?而當你的輸入文件中沒有任何東西看起來像JSON時,你爲什麼要考慮JSON? – ajb

+0

您的問題對於StackOverflow太寬泛,請在發佈之前訪問[幫助]並閱讀[問]。 –

+0

你至少應該在這裏顯示你想要的輸出/結果。 –

回答

0

好了,你可以使用這個程序來解決你的問題,我在這裏使用的目錄數據結構::

class Directory { 
    public String name; 
    public List<Directory > children; 
} 

所以,用此程序的幫助下,你會得到目錄中的列表所需的排序格式。這是我打印列表時的輸出,它是以排序格式顯示的。 [Directory [name = Abc,children = [Directory [name = Abc,children = [Directory [name = Abc,children = null]]],Directory [name = Def,children = [Directory [name = Xyz] [012] ,[子目錄[name = Def,children = null],目錄[name = Ghi,children = null],目錄[name = Def,children = [目錄[name = Abc,children =目錄[name = Xyz,children = null]]]]]]

看到該程序是不言自明的,如果您有任何疑問,您可以發表評論。

import java.io.BufferedReader; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class test { 

    public static void main(String[] args) throws IOException { 
     BufferedReader br = new BufferedReader(new FileReader("Input.txt")); 
     List<Directory> dirList = new ArrayList<>(); 
     try { 
      String line = br.readLine(); 
      while (line != null) { 
       int spaces = line.length() - line.replaceAll(" ", "").length(); 
       while (spaces == 0) { 
        Directory directory = new Directory(); 
        directory.name = line.replaceAll(" ", ""); 
        directory.children = new ArrayList<>(); 
        line = br.readLine(); 
        spaces = line.length() - line.replaceAll(" ", "").length(); 
        while (spaces == 4) { 
         Directory directory2 = new Directory(); 
         directory2.name = line.replaceAll(" ", ""); 
         directory2.children = new ArrayList<>(); 
         line = br.readLine(); 
         if (line == null) 
          break; 
         spaces = line.length() - line.replaceAll(" ", "").length(); 
         while (spaces == 8) { 
          Directory directory3 = new Directory(); 
          directory3.name = line.replaceAll(" ", ""); 
          directory2.children.add(directory3); 
          line = br.readLine(); 
          if (line == null) 
           break; 
          spaces = line.length() - line.replaceAll(" ", "").length(); 
         } 
         Collections.sort(directory2.children); 
         directory.children.add(directory2); 
        } 
        Collections.sort(directory.children); 
        System.out.println(directory); 
        dirList.add(directory); 
       } 
       line = br.readLine(); 
      } 
      Collections.sort(dirList); 
      System.out.println(dirList); 
     } finally { 
      br.close(); 
     } 
    } 
} 

class Directory implements Comparable<Directory> { 
    public String name; 
    public List<Directory> children; 

    @Override 
    public String toString() { 
     return "Directory [name=" + name + ", children=" + children + "]"; 
    } 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((name == null) ? 0 : name.hashCode()); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     Directory other = (Directory) obj; 
     if (name == null) { 
      if (other.name != null) 
       return false; 
     } else if (!name.equals(other.name)) 
      return false; 
     return true; 
    } 

    public void sort() { 
     Collections.sort(children); 
    } 

    @Override 
    public int compareTo(Directory o) { 
     return name.compareTo(o.name); 
    } 

} 
+0

您也可以使用簡單的地圖並以0.0.0,0.1.0,0.1.1,0.1.2的格式存儲索引,然後您可以對其進行排序,這樣做會更容易。 –