Извлечение подстрок в Go



Я пытаюсь прочитать всю строку из консоли (включая пробелы), а затем обработать ее. Используя bufio.ReadString, символ новой строки читается вместе с вводом, поэтому я придумал следующий код для обрезки символа новой строки:



input,_:=src.ReadString('n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string


есть ли более идиоматические способ сделать это? То есть, есть ли уже библиотека, которая заботится о конечном нулевом байте при извлечении подстрок для вас?



(Да, я знаю, что уже есть способ прочитать строку без символа новой строки в go readline - > string но я ищу больше для элегантной манипуляции строки.)

875   5  
go

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

получить подстроку

  1. найти позицию "sp"

  2. вырезать строку с массивом-логический

https://play.golang.org/p/0Redd_qiZM

Это простой для выполнения подстроки в 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

    Ничего не найдено.