在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