Pertanyaan Pisahkan string pada spasi di Go?


Diberikan string input seperti " word1 word2 word3 word4 ", apa yang akan menjadi pendekatan terbaik untuk membagi ini sebagai rangkaian string di Go? Perhatikan bahwa bisa ada apa saja jumlah spasi atau karakter unicode-jarak antara setiap kata.

Di Jawa saya hanya akan menggunakan someString.trim().split("\\s+").

(Catatan: kemungkinan duplikat Pisahkan string menggunakan ekspresi reguler di Go tidak memberikan jawaban berkualitas baik. Berikan contoh aktual, bukan hanya tautan ke regexp atau strings referensi paket.)


75
2017-12-06 05:53


asal


Jawaban:


Itu strings paket memiliki Fields metode.

someString := "one    two   three four "

words := strings.Fields(someString)

fmt.Println(words, len(words)) // [one two three four] 4

DEMO:


170
2017-12-06 06:05



Jika Anda menggunakan tip: regexp.Split

func (re *Regexp) Split(s string, n int) []string

Pisahkan irisan s ke dalam substring yang dipisahkan oleh ekspresi dan kembali sepotong substring di antara ekspresi tersebut.

Potongan yang dikembalikan oleh metode ini terdiri dari semua substring s tidak terkandung dalam potongan yang dikembalikan oleh FindAllString. Saat dipanggil pada ekspresi yang tidak mengandung metakarakter, itu sama dengan string. PlitN.

Contoh:

s := regexp.MustCompile("a*").Split("abaabaccadaaae", 5)
// s: ["", "b", "b", "c", "cadaaae"]

Hitungan menentukan jumlah substring yang akan dikembalikan:

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

6
2017-12-06 06:35



Saya datang dengan yang berikut, tapi itu sepertinya agak terlalu verbose:

import "regexp"
r := regexp.MustCompile("[^\\s]+")
r.FindAllString("  word1   word2 word3   word4  ", -1)

yang akan dievaluasi ke:

[]string{"word1", "word2", "word3", "word4"}

Apakah ada ekspresi yang lebih kompak atau lebih idiomatis?


2
2017-12-06 05:53