2011-03-01 41 views

उत्तर

23

मैं विभाजन

String text = "A=B&C=D&E=F"; 
Map<String, String> map = new LinkedHashMap<String, String>(); 
for(String keyValue : text.split(" *& *")) { 
    String[] pairs = keyValue.split(" *= *", 2); 
    map.put(pairs[0], pairs.length == 1 ? "" : pairs[1]); 
} 

संपादित करें का प्रयोग करेंगे गद्देदार रिक्त स्थान और एक = या कोई मूल्य नहीं के साथ एक मूल्य के लिए अनुमति देता है। जैसे

A = minus- & C=equals= & E==F 
+2

+1 का उपयोग करें। समान कोड लिखने की प्रक्रिया में। आंशिक रूप से इस पर निर्भर करता है कि कोड की जांच करने में कितनी त्रुटि है। क्या यह खिलौना कोड है? क्या इसे बुरी तरह से गठित इनपुट आदि के साथ कॉपी करने की आवश्यकता है? यदि कोड उदाहरण के लिए '=' नहीं है, तो यहां कोड arrayIndexException देगा, लेकिन यह परिदृश्य में ठीक हो सकता है। –

+0

यह इसे बंद करने के बजाय मान में '=' संभाल लेगा;) –

+0

@ टॉम, धन्यवाद, कुछ त्रुटि हैंडलिंग जोड़ा गया। –

1
String t = A=B&C=D&E=F; 
Map map = new HashMap(); 
String[] pairs = t.split("&"); 
//TODO 1) Learn generis 2) Use gnerics  
for (String pair : pairs) 
{ 
    String[] kv = pair.split("="); 
    map.put(kv[0], kv[1]); 
} 
2

स्प्लिट स्ट्रिंग '&' पर (या तो एक StringTokenizer या String.split() का उपयोग)। प्रत्येक टोकन पर बस '=' पर फिर से विभाजित करें। कुंजी के रूप में पहले भाग का उपयोग करें और दूसरे भाग को मान के रूप में उपयोग करें।

इसे रेगेक्स का उपयोग करके भी किया जा सकता है, लेकिन समस्या StringTokenizer के लिए वास्तव में काफी सरल है।

5
public class TestMapParser { 
    @Test 
    public void testParsing() { 
     Map<String, String> map = parseMap("A=B&C=D&E=F"); 
     Assert.assertTrue("contains key", map.containsKey("A")); 
     Assert.assertEquals("contains value", "B", map.get("A")); 

     Assert.assertTrue("contains key", map.containsKey("C")); 
     Assert.assertEquals("contains value", "D", map.get("C")); 

     Assert.assertTrue("contains key", map.containsKey("E")); 
     Assert.assertEquals("contains value", "F", map.get("E")); 
    } 

    private Map<String, String> parseMap(final String input) { 
     final Map<String, String> map = new HashMap<String, String>(); 
     for (String pair : input.split("&")) { 
      String[] kv = pair.split("="); 
      map.put(kv[0], kv[1]); 
     } 
     return map; 
    } 
} 
4

सिर्फ अमरूद स्प्लिटर

String src="A=B&C=D&E=F"; 
Map map= Splitter.on('&').withKeyValueSeparator('=').split(src); 
संबंधित मुद्दे