2016-10-04 5 views
-5

Ich möchte eine Zeichenfolge xxxxx: yyyyy: zzz.aaa.bbb.cc: dd: ee: ff zu einer Struktur in Golang, wie kann ich es mit mehreren Trennzeichen ':' und '.'Wie teilt man mehrere Begrenzer in Golang?

Edit:

ich die Zeichenfolge teilen wollen "xxxxx: Yyyyy: zzz.aaa.bbb.cc: dd" in unter Strukturtyp

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

Damit

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

Bitte geben Sie ein vollständigeres Beispiel. Dies ist wirklich das gleiche wie in jeder anderen Sprache, aber ohne zu sehen, was Sie ihm zuweisen möchten, ist es nicht möglich, Ihre Frage vollständig zu beantworten. Das grundlegende Ding ist, auf einen gespalten, dann auf den anderen gespalten. – evanmcdonnal

+0

Tut mir leid, dass Ok ich die Zeichenfolge teilen wollen "xxxxx: Yyyyy: zzz.aaa.bbb.cc: dd" in unter struct Typ Probe Struct { Service-String Typ String Domain-String -Plan Zeichenfolge -Host String Region String Andere Saiten } Damit Service = xxxxx Type = yyyyy Domain = zzzz -Plan = aaa Host = bbb Region = cc Andere = dd –

Antwort

1

In Ordnung. Dies ist keine sehr elegante Lösung, aber es sollte zumindest für das spezifische Beispiel, das Sie gegeben haben, beginnen und funktionieren. In der Realität möchten Sie wahrscheinlich eine Fehlerbehandlung hinzufügen oder die Logik etwas verallgemeinern, um mit einem breiteren Satz von Eingaben zu arbeiten.

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) 
} 

Arbeitsbeispiel hier; https://play.golang.org/p/57ZyOfdbvo

+0

wurde nur die Eingabe su Code-Code für ihn aus. Ich wollte es nicht in einem Code beantworten, der sowohl hässlich war als auch eine wertvolle Lektion, die man selbst lernen konnte. –

+0

@NathanHyland Ja, das könnte ein bisschen zu entgegenkommend sein. Zum Glück gibt es die Down-Vote-Funktion, um die Dinge auszugleichen :) – evanmcdonnal

9

können Sie verwenden

strings.FieldsFunc(input, Split) 

Ausprobieren 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 
} 

Ausgang:

{xxxxx yyyyy zzz aaa bbb cc dd} 
0

Hier ist eine generische Funktion, die eine Zeichenfolge als ein Satz nehmen von Runen zum Teilen.

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", " -") 
}