Java 如何将其解析为多值映射?

Java 如何将其解析为多值映射?,java,arrays,parsing,Java,Arrays,Parsing,我有一根绳子 name,5486984189.658.235.215,3.158.68.15,name 2189189189.658.218.268,3.158.68.13… 等等 我想我会把它放到地图上,但我不能完全确定。我正在查看具有多值映射的ApacheCommons集合库。即使我使用它,我也不确定如何将这个StringArray解析为它 编辑: 谢谢你的回复。我的总体目标是让这个字符串显示在JSF下拉列表中。 我有 我一直在引用这个 因此,我在这里,我刚刚发布。它将填充该字符串数组的每

我有一根绳子
name,5486984189.658.235.215,3.158.68.15,name 2189189189.658.218.268,3.158.68.13…

等等

我想我会把它放到地图上,但我不能完全确定。我正在查看具有多值映射的ApacheCommons集合库。即使我使用它,我也不确定如何将这个StringArray解析为它

编辑:

谢谢你的回复。我的总体目标是让这个字符串显示在JSF下拉列表中。 我有

我一直在引用这个

因此,我在这里,我刚刚发布。它将填充该字符串数组的每个元素。我只希望显示“name”,并将其他三个值作为实际的“value”传递

我想我可能需要提出一个新问题

我试图创建一个映射对象,它是一个字符串和一个字符串数组,但JSF拒绝接受它

这是一个新问题:
从你的问题中我能理解的是, 试试这个:

让您的数据:

   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]节=“名称,5486984189.658.235.215,3.158.68.15”;
第[1]节=“名称2189189189.658.218.268,3.158.68.13”

因为您将Apache Commons用于multimap,并且您知道有四个值:

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 map=新的MultiHashMap();
String[]elements=source.split(“,”);
//四人一组处理元素
对于(int-keyIndex=0;keyIndex

最后,您将得到一个每个键有三个元素的
多重映射。当然,您应该对数据进行一些合理性检查,但基本思想如上所述。

您并不真正需要多值/多值映射

我想一张地图就足够了

好吧,还是有分裂的想法

@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)));
    }
}

如果您确实需要一个集合/列表作为值,
Arrays.asList(array)
可以帮助您。

该数据的结构是什么,例如,密钥是什么?哪些是您的值?它当前位于字符串[]中。我正在从属性文件中提取它。我使用JSF来执行“SelectItems”,但我不希望显示每个元素。我只希望每个名称都是键,名称后的三个值都是值。按“,”拆分,您的节[0]应该是“名称”,对吗?或者我错过了什么?除非你的
split()。
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]);
}
@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]