Split-string-Länge in Golang
Weiß jemand wie das aufteilen einer Zeichenfolge in Golang, die von der Länge?
Beispielsweise zu Spalten "helloworld" nach jedem 3 Zeichen, so sollte es im Idealfall liefert ein array von "hel" "low" "orl" "d"?
Alternativ eine mögliche Lösung wäre auch, fügen Sie einen Zeilenumbruch nach jedem 3 Zeichen ein..
Alle Ideen werden sehr geschätzt!
- Gut, etwas Programmierung könnte hier helfen? Wie
s[n:n+3]+"\n"
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellen Sie sicher, dass konvertieren Ihre string in eine Scheibe rune: siehe "Slice-string in Buchstaben"
a[n:n+3]
funktioniert am besten mit einem Wesen, einer Scheibe rune.Den index erhöht sich um eine jeder rune, während es könnte Erhöhung um mehr als eins für jedes byte in einem Stück Schnur: "世界":
i
wäre 0 und 3: ein Zeichen (rune) gebildet werden kann, der mehrere bytes.Betrachten Sie beispielsweise
s := "世a界世bcd界efg世"
: 12 Runen. (siehe play.golang.org)Wenn Sie versuchen, analysieren es byte für byte, werden Sie vermissen (in einem naiv-split alle 3 chars Umsetzung) einige der "index modulo 3" (entspricht 2, 5, 8 und 11), da der index erhöhen Vergangenheit diese Werte:
Die Ausgabe:
Aber wenn Sie Durchlaufen auf Runen (
a := []rune(s)
), Sie würden bekommen, was Sie erwarten, denn der index ansteigen würde eine rune in einer Zeit, so dass es leicht zu aggregieren genau 3 Zeichen:Ausgabe:
Auch notwendig, eine Funktion dies zu tun, vor kurzem, siehe Beispiel für die Verwendung hier
Hier ist ein weiteres Beispiel (du kannst es versuchen hier):
Ich habe versucht, 3-version, die zum implementieren der Funktion, die Funktion mit dem Namen "splitByWidthMake" ist am schnellsten.
Diese Funktionen ignorieren die unicode-aber nur der ascii-code.
Eine einfache Lösung mit regex
re := regexp.MustCompile(
(\S{3})
)x := re.FindAllStringSubmatch("HelloWorld", -1)
fmt.Println(x)
https://play.golang.org/p/mfmaQlSRkHe
FindAllString
stattFindAllStringSubmatch
keine?