2017-09-13 11 views
-3

テキストファイルを特定の形式で並べ替える必要があります。 マイファイル:ツリー形式のファイルを並べ替える

AAAA 
    BBBB 
     CCCC 
     CCCC 
     CCCC 
AAAA 
    BBBB 
     CCCC 
    BBBB 
     CCCC 

そして、私はBBBBで別途AAAA (first)BBBB (second)AAAA内とCCCC (third)をソートする必要がありますが、私はそれを作る方法がわかりません。私はAAAAの間で、BBBBCCCCが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には広すぎます。投稿する前に[ヘルプ]にアクセスして[ask]を読んでください。 –

+0

少なくともここに出力/結果を表示する必要があります。 –

答えて

0

[OK]を、::

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

ので、このプログラムの助けを借りて、あなたがしてディレクトリのリストを取得します必要なソート形式。ソートされた書式のリストを印刷するときの出力です。ディレクトリ[name = Abc、children = null]]、ディレクトリ[name = Def、children = [Directory [name = Xyz]ディレクトリ[name = Ghi、children = null]、ディレクトリ[name = Ghi、children = null]、ディレクトリ[name =ディレクトリ[名前= Xyz、子供=ヌル]]]]]

プログラムを参照してくださいそれは自明であり、疑問がある場合はコメントすることができます。

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の形式でインデックスを保存してから、並べ替えることができます。 –

関連する問題