1

プロパティの深さを決定する先頭のスペースの数で階層化されたテキスト ファイルを解析し、各レベルの Java オブジェクトのセットを返す必要があります。スキャナーを使ったり、一行一行読み込んでみたりも考えましたが、面倒そうでした。おそらく正規表現がより良い解決策でしょうか?読む必要があるファイルは次のようになります。

workarea = workarea:
  size = (1583, 805, 0)
  areas = areas:
    place = array: 2 items
      0 = int: 0
      1 = int: 0
    size = (1583, 805, 0)
    areas = array: 2 items
      0 = object:
        type = myType:
          prop1 = prop1
          prop2 = array: 2 items
            0 = object:
              prop1 = prop1
              prop2 = prop2
            1 = object:
              prop1 = prop1
              prop2 = prop2
        position = (5, 5, 0)
        size = (735, 226, 0)
      1 = object:
        type = myType2:
          prop1 = prop1
          prop2 = array: 2 items
            0 = object:
              prop1 = prop1
              prop2 = prop2
            1 = object:
              prop1 = prop1
              prop2 = prop2
          prop3 = prop3
        position = (5, 5, 0)
        size = (735, 226, 0)

ご覧のとおり、「領域」オブジェクトが定義されており、5 行下に特定のタイプ (myType1 および myType2) の「オブジェクト」が埋め込まれています。これらの各サブオブジェクトには異なるプロパティがあります (例では、myType2 には prop3 があります。これには、他のオブジェクトの配列が含まれる場合があります)。

この構造を Java オブジェクトのグループに入れる最良の方法は次のとおりです。

Workarea
public String size = "1583,805"
public List<Areas> = (
        {Area
         public String type = "myType"
         Public String prop1 = prop1
         etc....
         },
         {Area
         public String type = "myType2"
         Public String prop1 = prop1
         etc....
         }
)
4

1 に答える 1

0

getValue と getValues のいくつかのメソッド (正規表現と一致する値の配列と、渡されたファイルの内容) を使用してパーサー クラスを構築することになりました。私が使用した正規表現は

    (?<=STRING_BEFORE_VAULE)(.*)(?=STRING_AFTER_VALUE_UTIL_EOF\\s*)

必要なファイルのセクションごとに、パーサー クラスを呼び出しました。

ご協力ありがとうございました。

于 2013-06-27T15:08:31.893 に答える