Próbuję odczytać cały wiersz z konsoli (w tym białe znaki), a następnie go przetworzyć. Używając bufio.ReadString, znak nowego wiersza jest odczytywany razem z wejściem, więc wymyśliłem następujący kod, aby przyciąć znak nowego wiersza:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
Czy jest na to bardziej idiomatyczny sposób? To znaczy, czy istnieje już biblioteka, która zajmuje się końcowym bajtem zerowym podczas wyodrębniania za Ciebie podciągów?
(Tak, wiem, że istnieje już sposób na odczytanie wiersza bez znaku nowej linii w go readline -> string, ale szukam bardziej eleganckiej manipulacji na ciągach).
s = s[:len(s)-1]
wystarczy.Ciągi Go nie są zakończone wartością null, a aby usunąć ostatni znak ciągu, możesz po prostu zrobić:
źródło
Aby uniknąć paniki przy wejściach o zerowej długości, zawiń operację obcięcia za pomocą if
źródło
To jest prosty sposób na wykonanie podciągu w Go
źródło
OSTRZEŻENIE: operowanie na samych łańcuchach będzie działać tylko z ASCII i będzie liczyć nieprawidłowo, gdy wejście jest znakiem zakodowanym w formacie innym niż ASCII UTF-8, i prawdopodobnie nawet uszkodzi znaki, ponieważ wycina wielobajtowe znaki w połowie sekwencji.
Oto wersja obsługująca UTF-8:
źródło
Aby uzyskać podciąg
znajdź pozycję „sp”
wytnij ciąg z logicznym tablicami
https://play.golang.org/p/0Redd_qiZM
źródło
8 lat później natknąłem się na ten klejnot, a mimo to nie wierzę, że na pierwotne pytanie OP rzeczywiście została udzielona odpowiedź:
Chociaż
bufio.Reader
typ obsługujeReadLine()
metodę, która zarówno usuwa, jak\r\n
i\n
jest rozumiana jako funkcja niskiego poziomu, która jest niewygodna w użyciu, ponieważ konieczne są wielokrotne sprawdzenia.IMO idiomatycznym sposobem na usunięcie białych znaków jest użycie biblioteki ciągów znaków Golanga :
Zobacz ten przykład w akcji na placu zabaw Golang: https://play.golang.org/p/HrOWH0kl3Ww
źródło