这是我之前提出的问题的后续问题(找到here)。到目前为止,我的属性文件包含简单的键值对,如整数和字符串。我现在想用它来放置一些更高级的结构,更具体地说,我需要一个Map< A,Integer>其中A是我定义的类,例如:
foo=bar,5;baz,10
这可能吗?如果是这样,我应该如何格式化文件并分别解析地图?
是否有更好的方法可以解决这个问题?
答案 0 :(得分: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.
}
}
答案 1 :(得分:1)
对于你正在尝试做的事情以及你的长期计划可能有点过分,但我发现Spring框架很容易处理这种事情。
以下是展示如何handle collections including maps的参考资料。
这是另一个general article on 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>
答案 2 :(得分:1)
使用具有您自己语言的XML而不是属性文件来表示更复杂的结构,它将减少工作量,减少错误,更易于维护。
您可以使用JIBX和XML Bean等绑定技术来简化操作。
答案 3 :(得分:1)
在这个例子中最简单的方法是为它创建一个单独的属性文件。然后它只有名称/值对,如
巴= 5 巴兹= 10
如果这是一张大桌子,我不想把它与更常见的东西混在一起。如果它是一个有3对的表,那就不同了。
属性文件确实是复杂数据结构的最佳解决方案。它们用于名称/值对。如果你超越了这一点,当然,你可以通过发明一种语法使它工作,但为什么要这么麻烦?如果它是一种超级复杂的语法,那么XML是一种可能性。或者它可能属于关系数据库。或CSV文件。选择符合要求的工具,不要先决定工具,然后尝试使其适合。