我有以下格式的输入字符串:

消息:id1:[label1:label2 ....:labelN]:id2:[label1:label2 ....:labelM]:id3:[label1:label2 ....:labelK] ...

它基本上是与标签集关联的id。可以有任意数量的ID和与这些ID相关的标签。

我希望能够解析此字符串并生成id-> labels形式的HashMap,以便以后快速查找。

我想知道在Java中解析此消息的最有效方法是什么?

最佳答案

这样的事情应该为您工作:

String str = "Message:id1:[label1:label2:labelN]:id2:[label1:label2:labelM]:id3:[label1:label2:labelK]";
Pattern p = Pattern.compile("([^:]+):\\[([^\\]]+)\\]");
Matcher m = p.matcher(str.substring(8));
Map<String, List<String>> idmap = new HashMap<String, List<String>>();
while (m.find()) {
    List<String> l = new ArrayList<String>();
    String[] tok = m.group(2).split(":");
    for (String t: tok)
        l.add(t);
    idmap.put(m.group(1), l);
}
System.out.printf("IdMap %s%n", idmap);


现场演示:http://ideone.com/EoieUt

10-02 05:12
查看更多