2016-10-04 129 views
-5

我想解析一個字符串xxxxx:yyyyy:zzz.aaa.bbb.cc:dd:ee:ff到Golang中的一個結構,我怎麼用多個分隔符':'和'。'來做到這一點。如何在Golang中分割多個分隔符?

編輯:

我想拆分字符串 「XXXXX:YYYYY:zzz.aaa.bbb.cc:DD」 到下面的結構類型

type Target struct { 
    Service string 
    Type string 
    Domain string 
    Plan string 
    Host string 
    Region string 
    Other string 
} 

這樣

Service = xxxxx 
Type = yyyyy 
Domain = zzzz 
Plan = aaa 
Host = bbb 
Region = cc 
Other = dd 
+2

請給出一個更完整的例子。這與任何其他語言都是一樣的,但是沒有看到你想要指定的內容,因此無法完全回答你的問題。基本的事情是,分裂一個,然後分裂。 – evanmcdonnal

+0

很抱歉, 好,我想拆分字符串「XXXXX:YYYYY:zzz.aaa.bbb.cc:DD」到下面結構 類型的樣本結構{ 服務字符串類型 串 域串 計劃串 主機串 地區字符串 其他字符串 } 讓服務= XXXXX 類型= YYYYY 域= ZZZZ 計劃= AAA 主機= BBB 地區= CC 其他= DD –

回答

1

好的。這不是一個非常優雅的解決方案,但至少應該讓你開始並且爲你給出的具體例子工作。實際上,您可能想要添加一些錯誤處理或將邏輯推廣一點以使用更廣泛的輸入。

type Target struct { 
    Service string 
    Type string 
    Domain string 
    Plan string 
    Host string 
    Region string 
    Other string 
} 

func main() { 
    input := `xxxxx:yyyyy:zzz.aaa.bbb.cc:dd:ee:ff` 
    t := Target{} 
    tokens := strings.Split(input, ":") 
    t.Service = tokens[0] 
    t.Type = tokens[1] 
    subtokens := strings.Split(tokens[2], ".") 
    t.Domain = subtokens[0] 
    t.Plan = subtokens[1] 
    t.Host = subtokens[2] 
    t.Region = subtokens[3] 
    t.Other = tokens[3] 
    fmt.Printf("%v", t) 
} 

工作示例在這裏; https://play.golang.org/p/57ZyOfdbvo

+0

只是鍵入su爲他做這個代碼。不想用代碼來回答它,這既是醜陋的,也是寶貴的教訓,可以自己學習。 –

+0

@NathanHyland是的,這可能有點過於寬容。幸運的是有投票功能來幫助平衡事情:) – evanmcdonnal

9

您可以使用

strings.FieldsFunc(input, Split) 

嘗試在The Go Playground

package main 

import (
    "fmt" 
    "strings" 
) 

func main() { 
    input := `xxxxx:yyyyy:zzz.aaa.bbb.cc:dd:ee:ff` 
    a := strings.FieldsFunc(input, Split) 
    t := Target{a[0], a[1], a[2], a[3], a[4], a[5], a[6]} 
    fmt.Println(t) // {xxxxx yyyyy zzz aaa bbb cc dd} 
} 
func Split(r rune) bool { 
    return r == ':' || r == '.' 
} 

type Target struct { 
    Service string 
    Type string 
    Domain string 
    Plan string 
    Host string 
    Region string 
    Other string 
} 

輸出:

{xxxxx yyyyy zzz aaa bbb cc dd} 
0

這裏是一個通用的函數,將一個字符串作爲一組的符文分裂。

func Splitter(s string, splits string) []string { 
    m := make(map[rune]int) 
    for _, r := range splits { 
     m[r] = 1 
    } 

    splitter := func(r rune) bool { 
     return m[r] == 1 
    } 

    return strings.FieldsFunc(s, splitter) 
} 

func TestSplit() { 
    words := Splitter("orange apple-banana", " -") 
} 
相關問題