_" Word1 Word2 Word3 Word4 "
_などの入力文字列が与えられた場合、これをGoの文字列の配列として分割する最良の方法は何でしょうか?各ワード間にany個のスペースまたはUnicode間隔文字が存在する可能性があることに注意してください。
Javaでは、単にsomeString.trim().split("\\s+")
を使用します。
(注:重複する可能性があります Goで正規表現を使用して文字列を分割する は、質の良い回答を提供しません。regexp
またはstrings
パッケージ参照。)
strings
パッケージには Fields
メソッドがあります。
_someString := "one two three four "
words := strings.Fields(someString)
fmt.Println(words, len(words)) // [one two three four] 4
_
DEMO:http://play.golang.org/p/et97S90cIH
ドキュメントから:
func Fields(s string) []string
Fieldsは、文字列
s
を1つ以上の連続する空白文字の各インスタンスの周りで分割し、s
の部分文字列の配列またはsに空白のみが含まれる場合は空のリストを返します。
ヒントを使用している場合: regexp.Split
func (re *Regexp) Split(s string, n int) []string
スライスsを式で区切られた部分文字列に分割し、それらの式の一致の間の部分文字列のスライスを返します。
このメソッドによって返されるスライスは、FindAllStringによって返されるスライスに含まれていないsのすべての部分文字列で構成されます。メタキャラクターを含まない式で呼び出された場合、strings.SplitNと同等です。
例:
s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]
カウントは、返すサブストリングの数を決定します。
n > 0: at most n substrings; the last substring will be the unsplit remainder.
n == 0: the result is nil (zero substrings)
n < 0: all substrings
私は次のことを思いつきましたが、それは少し冗長すぎるようです:
import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString(" Word1 Word2 Word3 Word4 ", -1)
次のように評価されます:
[]string{"Word1", "Word2", "Word3", "Word4"}
もっとコンパクトな表現やより慣用的な表現はありますか?