Извлечение подстрок в Go
Я пытаюсь прочитать всю строку из консоли (включая пробелы), а затем обработать ее. Используя bufio.ReadString, символ новой строки читается вместе с вводом, поэтому я придумал следующий код для обрезки символа новой строки:
input,_:=src.ReadString('n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
есть ли более идиоматические способ сделать это? То есть, есть ли уже библиотека, которая заботится о конечном нулевом байте при извлечении подстрок для вас?
(Да, я знаю, что уже есть способ прочитать строку без символа новой строки в go readline - > string но я ищу больше для элегантной манипуляции строки.)
5 ответов:
похоже, вас смущает работа срезов и формат хранения строк, который отличается от того, что у вас есть в C.
- любой срез в Go хранит длину (в байтах), поэтому вам не нужно заботиться о стоимости
lenоперация : нет необходимости считать- строки Go не завершаются нулем, поэтому вам не нужно удалять нулевой байт, и вам не нужно добавлять
1после нарезки, добавив пустой строка.чтобы удалить последний символ (если это однобайтовый символ), просто сделайте
inputFmt:=input[0:len(input)-1]и, как заметил Уриэль, вы можете сократить это как
inputFmt:=input[:len(input)-1]
Go строки не заканчиваются нулем, и чтобы удалить последний символ строки, вы можете просто сделать:
s = s[:len(s)-1]
чтобы избежать паники на входе нулевой длины, оберните операцию усечения в if
input, _ := src.ReadString('\n') var inputFmt string if len(input) > 0 { inputFmt = input[:len(input)-1] } // Do something with inputFmt
Это простой для выполнения подстроки в Go
package main import "fmt" var p = fmt.Println func main() { value := "address;bar" // Take substring from index 2 to length of string substring := value[2:len(value)] p(substring) }
Comments