2016-02-26 6 views
5

मेरे पास एक स्ट्रिंग है जैसे ए = बी & सी = डी & ई = एफ, गोलांग में इसे मानचित्र में कैसे पार्स करें?मानचित्र में पार्स स्ट्रिंग गोलांग

यहाँ जावा पर उदाहरण है, लेकिन मैं इस split हिस्सा

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]); 
} 
+1

मुझे लगता है कि आप वास्तव में क्या चाहते हैं ['url.ParseQuery'] (https://golang.org/pkg/net/url/#ParseQuery)। – twotwotwo

उत्तर

5

हो सकता है कि क्या आप वास्तव में चाहते हैं एक HTTP क्वेरी स्ट्रिंग पार्स करने है समझ में नहीं आता है, और url.ParseQuery कि नहीं करता है। (यह क्या लौटाता है, अधिक सटीक, url.Values प्रत्येक कुंजी के लिए []string संग्रहीत करता है, क्योंकि URL में कभी-कभी प्रति एक से अधिक मान होते हैं।) यह HTML से बचने वाले चीजें करता है (%0A, आदि) जो कि विभाजन नहीं करता है। यदि आप the source of url.go में खोज करते हैं तो आप इसका कार्यान्वयन पा सकते हैं।

  • map[string]string की जाओ के अनुरूप है:

    हालांकि, अगर आप कर वास्तव में सिर्फ & और = पर विभाजित करने के लिए की तरह है कि जावा कोड था, वहाँ अवधारणाओं और वहाँ उपकरण के सभी के लिए जाओ analogues हैं चाहते हैं Map<String, String>

  • strings.Split आपके लिए & पर विभाजित हो सकता है। SplitN जावा में split() के दो-तर्क संस्करण की तरह विभाजित टुकड़ों की संख्या को सीमित करता है। ध्यान दें कि केवल एक टुकड़ा हो सकता है ताकि pieces[1] कहने का प्रयास करने से पहले आपको len(pieces) जांचना चाहिए।
  • for _, piece := range pieces आपके द्वारा विभाजित टुकड़ों को फिर से सक्रिय करेगा।
  • जावा कोड रिक्त स्थान पर ट्रिम करने के लिए regexes पर भरोसा करता है। जाओ Split उनका उपयोग नहीं करता है, लेकिन strings.TrimSpace ऐसा कुछ करता है जो आप चाहते हैं (विशेष रूप से, दोनों तरफ से यूनिकोड व्हाइटस्पेस के सभी प्रकार स्ट्रिप्स)।

मैं आपको वास्तविक कार्यान्वयन छोड़ रहा हूं, लेकिन शायद ये पॉइंटर्स आपको प्रारंभ कर सकते हैं।

5
import ("strings") 

var m map[string]string 
var ss []string 

s := "A=B&C=D&E=F" 
ss = strings.Split(s, "&") 
m = make(map[string]string) 
for _, pair := range ss { 
    z := strings.Split(pair, "=") 
    m[z[0]] = z[1] 
} 

यह वही करेगा जो आप चाहते हैं।

+0

मूल जावा से कुछ अंतर: 1) जब किसी आइटम में '=', 2 गुम हो जाता है तो यह इंडेक्स के साथ क्रैश हो जाएगा) यह delimiters के आस-पास की जगहों को स्ट्रिप नहीं करता है, 3) '=' के बाद कुछ भी मूल्य भाग गिरा दिया गया है। समान के समान कुछ करने के लिए ठीक है, बस सभी भालू नोटिस (विशेष रूप से दुर्घटना)। – twotwotwo

संबंधित मुद्दे