2016-02-26 78 views
5

我有一個字符串象A = B & C = d & E =男,如何將其解析爲地圖中golang?解析串入地圖Golang

這裏是例如在Java中,但我不明白這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,因爲網址有時每個鍵有多個值)。它不喜歡的東西解析HTML逃逸(%0A等),只是分裂沒有。如果您在the source of url.go中搜索,則可以找到它的實現。

不過,如果你真的只想各執&=像Java代碼一樣,有圍棋類似物對所有的理念和工具有:

  • map[string]string是圍棋的模擬Map<String, String>
  • strings.Split可以分割上&你。在Java中,SplitN限制了拆分成像split()這樣的雙參數版本的數量。請注意,可能只有一個部分,因此您應該在嘗試訪問pieces[1]之前檢查len(pieces)
  • for _, piece := range pieces會遍歷你拆件。
  • Java代碼似乎依賴於正則表達式來修剪空格。 Go的Split不使用它們,但strings.TrimSpace做了類似你想要的東西(特別是從兩側去除各種Unicode空白)。

我將離開實際的實施給你,但也許這些指針可以讓你開始。

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

與原始Java有一些不同:1)當一個項目缺少一個'='時,這將會導致索引超出範圍,2)這不會去掉分隔符周圍的空格,3)價值部分被丟棄。很好地做類似的事情而不是相同的,只是所有的熊都注意到(特別是崩潰)。 – twotwotwo