0

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

等等

我在想我会把它放到地图中,但我不完全确定。我正在查看具有多值映射的 Apache Commons Collection 库。即使我使用它,我也不确定如何将这个 StringArray 解析成它。

编辑:

感谢您的答复。我的总体目标是让该字符串显示在 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 我需要用 StringArray 填充 selectItems 但我需要先解析它

4

3 回答 3

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每个键包含三个元素。您当然应该对数据进行一些完整性检查,但基本思想如上所述。

于 2012-10-16T14:49:29.870 回答
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(",");

这些部分将包含以下数据:

部分[0] = "名称,5486984,189.658.235.215,3.158.68.15"; 部分[1] = "名称2,189189,189.658.218.268,3.158.68.13";

于 2012-10-16T14:44:09.180 回答
0

你真的不需要一个多值/多图。

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

于 2012-10-16T15:14:15.190 回答