在Go中提取子string

我试图从控制台(包括空白)读整行,然后处理它。 使用bufio.ReadString,换行符与input一起被读取,所以我想出了以下代码来修剪换行符:

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

有没有更习惯的方式来做到这一点? 也就是说,在为你提取子string时,是否已经有一个库负责结束空字节?

(是的,我知道已经有一种方法可以在没有换行字符的情况下读取一行,但是我更喜欢string操作。)

它看起来像你的工作片和string存储格式,这是不同于你在C中的困惑。

  • Go中的任何切片都会存储长度(以字节为单位),因此您不必关心len操作的成本:无需计数
  • Gostring不是空终止的,所以你不必删除一个空字节,并且你不必在添加一个空string之后添加1

要删除最后一个字符(如果它是一个字节字符),只需要做

 inputFmt:=input[0:len(input)-1] 

正如乌列尔所注意到的那样,你可以缩短这个

 inputFmt:=input[:len(input)-1] 

去的string不是空终止,并删除string的最后一个字符,你可以简单地做:

 s = s[:len(s)-1] 

为了避免零长度input的恐慌,将截断操作包装在if中

 input, _ := src.ReadString('\n') var inputFmt string if len(input) > 0 { inputFmt = input[:len(input)-1] } // Do something with inputFmt 

获取子string

  1. find“sp”的位置

  2. 用数组逻辑剪切string

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