3

这是我之前的问题(在此处找到)的后续行动。到目前为止,我的属性文件由简单的键值对组成,例如整数和字符串。我现在想用它在其中放置一些更高级的结构,更具体地说,我需要一个 Map<A, Integer> 其中 A 是我定义的类,例如:

foo=bar,5;baz,10

这可能吗?如果是这样,我应该如何分别格式化文件和解析地图?

有没有更好的方法来解决这个问题?

4

4 回答 4

3

您是否考虑过使用 split() 和 trim()。

请看下面:

ResourceBundle rb = ResourceBundle.getBundle(Prop.class.getName());

    String fooValue = rb.getString("foo");
    String[] firstSplit = fooValue.split(";");
    for(String first : firstSplit){
        String firstTrim = first.trim();

        String[] intAndString = firstTrim.split(",");
        if(intAndString.length == 2){
            String intString = intAndString[0].trim();
            String stringVal = intAndString[1].trim();

            //TODO add entries here or return value.

        }
    }
于 2009-09-04T17:00:29.700 回答
1

对于您正在尝试做的事情和您的长期计划来说,这可能是矫枉过正,但我​​发现这种事情很容易由 Spring Framework 处理。

这是一个参考,展示了如何处理包括 maps 在内的集合

这是另一篇关于 Spring 的一般文章

这是地图在 Spring 配置文件中的样子

<beans>
    <bean id="foo" class="x.y.Foo">
        <property name="accounts">
            <map>
                <entry key="one" value="9.99"/>
                <entry key="two" value="2.75"/>
                <entry key="six" value="3.99"/>
            </map>
        </property>
    </bean>
</beans>
于 2009-09-04T17:27:54.650 回答
1

用你自己的语言使用 XML 而不是属性文件来表示更复杂的结构,它会更少的工作,更少的错误,更容易维护。

您可以使用 JIBX 和 XML Beans 等绑定技术使事情变得更简单。

于 2009-09-04T17:32:56.747 回答
1

在这个例子中最简单的做法是为它创建一个单独的属性文件。然后它只有名称/值对,例如

酒吧=5 巴兹=10

如果这是一张大桌子,我不想把它和更一般的东西混在一起。如果是一张有 3 对的桌子,那就不同了。

属性文件确实是复杂数据结构的最佳解决方案。它们适用于名称/值对。如果你超越了这一点,当然,你可以通过发明一种语法来让它工作,但为什么要麻烦呢?如果它是一种超级复杂的语法,那么 XML 是一种可能。或者它可能属于关系数据库。或 CSV 文件。选择符合要求的工具,不要先决定工具,然后尝试使其适合。

于 2009-09-04T17:47:27.280 回答