와 같은 입력 문자열이 주어지면 " word1 word2 word3 word4 "
Go에서 이것을 문자열 배열로 분할하는 가장 좋은 방법은 무엇입니까? 참고가 될 수 있는 각 단어 사이에 공백 또는 유니 코드-간격 문자 수.
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
데모: http://play.golang.org/p/et97S90cIH
문서에서 :
func Fields(s string) []string
Fields
s
는 하나 이상의 연속 된 공백 문자의 각 인스턴스 주위 에서 문자열을 분할하여 의 하위 문자열 배열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"}
더 간결하거나 더 관용적 인 표현이 있습니까?