【问题标题】:Read Hierarchical text file with leading spaces for each field读取每个字段前导空格的分层文本文件
【发布时间】:2013-06-10 22:21:26
【问题描述】:

我需要解析一个层次结构的文本文件,其中前导空格的数量决定了属性的深度,并为每个级别返回一组 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)

如您所见,定义了一个“区域”对象,然后用特定类型(myType1 和 myType2)的“对象”填充下方 5 行。这些子对象中的每一个都有不同的属性,(在示例中 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....
         }
)

【问题讨论】:

  • 你能负担得起使用外部解析库吗?
  • 外部是指非java吗?如果是这样,没有。但是如果是Java就没有问题。你想到了什么?
  • 它是 Java。我在想的是Parboiled。语法是用 Java 编写的,你有一个堆栈,你可以在你的情况下使用它来推送/弹出构建器,以便根据需要创建不同的对象
  • 我最终构建了一个解析器类,其中包含几个方法 getValue 和 getValues(返回和与传入的正则表达式匹配的值数组)。我使用的正则表达式是 (?

标签: java text space hierarchical


【解决方案1】:

我最终构建了一个解析器类,其中包含几个方法 getValue 和 getValues(返回的值数组与传入的正则表达式和文件内容相匹配)。我使用的正则表达式是

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

对于我想要的文件的每个部分,我只需调用 Parser 类。

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2011-11-09
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多