2012-10-16 110 views
0

我有一個字符串,它是 name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13...我該如何解析這個MultiValued Map?

我在想,我會把它放到地圖,但我不能完全肯定。我正在查看具有多值地圖的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 I need to populate selectItems with a StringArray but I need to parse it first

+2

該數據的結構例如關鍵是什麼?你的價值是什麼? –

+0

它目前在一個String []中。我把它從一個屬性文件中拉出來。我正在使用JSF來執行「SelectItems」,但我不希望顯示每個元素。我只希望每個名稱都是關鍵字,而名稱後面的以下三個值是值。 – envinyater

回答

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三個要素。你當然應該對數據做一些健全的檢查,但是基本的想法在上面。

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」; 節[1] =「名稱2,189189,189.658.218.268,3.158.68.13」;

+0

按「,」分割,您的分區[0]應該是「名稱」正確的?或者我錯過了什麼? – Kent

+1

除非你的'split()'是通靈的,它不會知道只在每一個第四個逗號分割;)。 –

0

你並不需要mutivalued/multimap。

a 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)可以幫助你。