2012-02-20 15 views
1

私は多くのサブメニューを持つポップアップメニューを生成するメソッドを持っています。基本的にこれらのメニューは動的に与えられているので、下の文字列を使用してサブメニューを作成するアルゴリズムを持つ必要があります。 これを行うには、区切り文字を使ってこの文字列を分割してJava Treeに変換する必要があります。分割された文字列データを処理し、親ノードと子ノードに応じてJavaツリーモデルに変換する方法については悩んでいます。文字列をJavaツリーに解析する方法は?

Iを解析する必要が動的文字列値のアン例:

文字列str = "メニュー1、メニュー2 [Menu2A; Menu2B [Menu2B-A; Menu2B-B];]; MENU3と、"。

取り扱い操作した後、出力は次のようになります。

        Pop-up Menu 
           / |  \ 
          Menu1 Menu2 Menu3 
           / | 

           Menu2A  Menu2B 
              |  \ 
              |  \ 
             Menu2B-A Menu2B-B 
+2

再帰的な何か – Tom

答えて

2

あなたが何か行うことができます:文字列トラバース

  • を、現在の文字列変数に文字を収集し、左から右へ。
  • ;が発生した場合は、現在の文字列を(level, array of menu entries for level)のデータ構造体に入れます。
  • あなたが]リターンが発生した場合は、文字列の残りの部分とレベル+ 1
  • を再帰的に[コールが発生した場合。

いくつかのおおよそのJavaコード:

private int parseString(String input, String parent, 
         Map<String, ArrayList<String>> levels) { 

    StringBuilder currentString = new StringBuilder(); 
    int index = 0; 
    while(index < input.length()) { 
     char c = input.charAt(index); 

     if(c == ' ') { // ignore spaces 
      index++; 
      continue; 
     } 

     if(c == ';') { // end of menu entry, add to the list 
      if(!currentString.toString().isEmpty()) { 
       levels.put(currentString.toString(), new ArrayList<String>());    
       levels.get(level).add(currentString.toString()); 
      } 
      currentString.delete(0, currentString.length()); 
      index++; 
      continue; 
     } 

     if(c == ']') { // end of sublist, return 
      return index + 1; 
     } 

     if(c == '[') { // start of sublist, recursive call 
      int temp = parseString(input.substring(index + 1), 
            levels.get(parent).get(levels.get(parent).size() - 1), levels); 
      index += temp; 
      index++; 
      continue; 
     } 

     currentString.append(c); 
     index++;    
    } 
    return 0; 
} 
+1

こんにちはチューダー!私は正確にParent変数が何で、どのような種類のデータを保持するのかを特定しようとしていますか? @Tudor – mbasol

+0

'parent'は、親の名前を保持する単なる文字列です。 – Tudor

+0

よく 'input'がメニュー項目名を保持しますが、' parent'は文字列を保持しますが、 'input'変数から親を得るために' parent'をseparetelyで処理する必要がありますか?すみません、少し混乱しています。 @Tudor – mbasol

関連する問題