如何解析成一个多值地图呢?(How do I parse this into a MultiValu

2019-11-01 03:41发布

我有一个字符串,它是name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13...

等等

我在想,我会把它放到地图,但我不能完全肯定。 我看有多值映射在Apache下议院收藏库。 即使我使用我不能确定如何解析这个字符串数组进去。

编辑:

感谢您的答复。 我的总体目标是获得该字符串在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我需要填充一个字符串数组selectItems的,但我需要先分析它

Answer 1:

由于您使用的是Apache共享的多重映射,你知道有四个值:

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每个关键三个要素。 当然,你应该做的一些数据完整性检查,但上述基本思路是。



Answer 2:

我可以从你的问题明白了,试试这个::

让您的数据:

   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(",");

该部分将有这样的数据:

段[0] = “名称,5486984,189.658.235.215,3.158.68.15”; 部分[1] = “name2,189189,189.658.218.268,3.158.68.13”;



Answer 3:

你并不真的需要一个mutivalued /多重映射。

一个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)可以帮助你。



文章来源: How do I parse this into a MultiValued Map?