Saya mencoba membaca seluruh baris dari konsol (termasuk spasi), lalu memprosesnya. Menggunakan bufio.ReadString, karakter baris baru dibaca bersama dengan input, jadi saya datang dengan kode berikut untuk memangkas karakter baris baru:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
Apakah ada cara yang lebih idiomatis untuk melakukan ini? Artinya, apakah sudah ada pustaka yang menangani byte nol akhir saat mengekstrak substring untuk Anda?
(Ya, saya tahu sudah ada cara untuk membaca baris tanpa karakter baris baru di go readline -> string tetapi saya lebih mencari manipulasi string yang elegan.)
s = s[:len(s)-1]
sudah cukup.String Go tidak diakhiri null, dan untuk menghapus karakter terakhir dari sebuah string, Anda cukup melakukan:
sumber
Untuk menghindari kepanikan pada input panjang nol, gabungkan operasi pemotongan dalam if
sumber
Ini adalah cara sederhana untuk melakukan substring di Go
sumber
PERINGATAN: beroperasi pada string saja hanya akan bekerja dengan ASCII dan akan dihitung salah jika input adalah karakter non-ASCII UTF-8 yang dikodekan, dan bahkan mungkin akan merusak karakter karena memotong karakter multibyte di tengah urutan.
Berikut adalah versi yang mendukung UTF-8:
sumber
Untuk mendapatkan substring
cari posisi "sp"
potong string dengan array-logis
https://play.golang.org/p/0Redd_qiZM
sumber
8 tahun kemudian saya menemukan permata ini, namun saya tidak percaya pertanyaan asli OP benar-benar terjawab:
Sementara
bufio.Reader
tipe mendukungReadLine()
metode yang keduanya menghapus\r\n
dan\n
itu dimaksudkan sebagai fungsi tingkat rendah yang canggung untuk digunakan karena pemeriksaan berulang diperlukan.IMO cara idiomatik untuk menghapus spasi adalah dengan menggunakan pustaka string Golang :
Lihat contoh ini beraksi di taman bermain Golang: https://play.golang.org/p/HrOWH0kl3Ww
sumber