我有一个字符串
name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13...
等等
我在想我会把它放到地图上,但我不完全确定。我正在查看具有多值映射的Apache Commons Collection库。即使我使用它,我也不确定如何将此StringArray解析为它。
编辑:
感谢您的回复。我的总体目标是让String出现在JSF下拉列表中。 我有
<f:selectItems itemValue="#{mainBean.information}" value="#mainBean.information}" />
在我的Java中我有
Private String [] information;
information = config.getStringArray("information"); // This brings in this string from the property file
我一直在引用这个 http://www.horstmann.com/corejsf/refcard.html
所以我在这里,我刚发布的内容。它将填充该字符串数组的每个元素。我只希望显示“名称”,并将其他三个值作为实际“值”传递。
我猜我可能需要提出一个新问题。
我尝试创建一个字符串和字符串数组的Map对象,但JSF拒绝接受它。
这是一个新问题: JSF I need to populate selectItems with a StringArray but I need to parse it first
答案 0 :(得分:1)
由于您将Apache Commons用于多图,并且您知道有四个值:
MultiMap map = new MultiHashMap();
String[] elements = source.split(",");
// process the elements in groups of four
for (int keyIndex = 0; keyIndex < elements.length; keyIndex += 4) {
String key = elements[keyIndex];
map.put(key, elements[keyIndex+1]);
map.put(key, elements[keyIndex+2]);
map.put(key, elements[keyIndex+3]);
}
最后,你得到一个MultiMap
,每个键有三个元素。您当然应该对数据进行一些完整性检查,但基本思路就在上面。
答案 1 :(得分:0)
我可以从你的问题中理解, 试试这个::
让您的数据成为:
String data = "name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13"
// Now you have
String[] sections = data.split(",");
这些部分的数据如下:
sections [0] =“name,5486984,189.658.235.215,3.158.68.15”; sections [1] =“name2,189189,189.658.218.268,3.158.68.13”;
答案 2 :(得分:0)
你真的不需要mutivalued / multimap。
map <String, String[]>
就足够了。
仍然是分裂的想法
@Test
public void testIt() {
final String s = "name,5486984,189.658.235.215,3.158.68.15," +
"name2,189189,189.658.218.268,3.158.68.13," +
"name3,5486984,189.658.235.215,3.158.68.15," +
"name4,189189,189.658.218.268,3.158.68.13";
final String[] sections = s.split(",(?=[a-zA-Z])");
final Map<String, String[]> map = new HashMap<String, String[]>();
String[] tmp;
for (final String sec : sections) {
tmp = sec.split(",", 2);
map.put(tmp[0], tmp[1].split(","));
}
//just for output
for (final String k : map.keySet()) {
LOG.debug("{} - {}", k, Arrays.toString(map.get(k)));
}
}
输出:
DEBUG: name3 - [5486984, 189.658.235.215, 3.158.68.15]
DEBUG: name4 - [189189, 189.658.218.268, 3.158.68.13]
DEBUG: name - [5486984, 189.658.235.215, 3.158.68.15]
DEBUG: name2 - [189189, 189.658.218.268, 3.158.68.13]
如果你真的需要一个集合/列表值,Arrays.asList(array)
可以帮助你。