我正在尝试从控制台(包括空格)读取整行,然后处理它。使用bufio.ReadString,换行字符与输入一起读取,所以我想出了以下代码来修剪换行符:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
有更惯用的方法吗?也就是说,在为您提取子字符串时,是否已有一个处理结束空字节的库?
(是的,我知道有一种方法可以在go readline -> string中读取没有换行符的行,但我正在寻找更优雅的字符串操作。)
答案 0 :(得分:103)
看起来你对切片的工作和字符串存储格式感到困惑,这与你在C中的不同。
len
操作的成本:无需计算1
添加空字符串。要删除最后一个字符(如果它是一个字节的字符),只需执行
inputFmt:=input[:len(input)-1]
答案 1 :(得分:18)
Go字符串不是以null结尾,并且要删除字符串的最后一个字符,您可以这样做:
s = s[:len(s)-1]
答案 2 :(得分:9)
为避免零长度输入发生混乱,请将截断操作包装在if
中input, _ := src.ReadString('\n')
var inputFmt string
if len(input) > 0 {
inputFmt = input[:len(input)-1]
}
// Do something with inputFmt
答案 3 :(得分:3)
获取子字符串
找到“sp”的位置
使用array-logical
答案 4 :(得分:2)
这是在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)
}
答案 5 :(得分:2)
8年后,我偶然发现了这个宝石,但我不相信OP最初的问题确实得到了回答:
所以我想出了以下代码来修剪换行符
虽然bufio.Reader
类型支持ReadLine()
方法,该方法同时删除了\r\n
和\n
,但这是一个低级函数,由于重复检查而难以使用是必需的。
IMO删除空白的一种惯用方法是使用Golang的strings库:
input, _ = src.ReadString('\n')
// more specific to the problem of trailing newlines
actual = strings.TrimRight(input, "\r\n")
// or if you don't mind to trim leading and trailing whitespaces
actual := strings.TrimSpace(input)
在Golang游乐场中查看以下示例:https://play.golang.org/p/HrOWH0kl3Ww
答案 6 :(得分:0)
警告:仅对字符串进行操作仅适用于ASCII,并且当输入是非ASCII UTF-8编码字符时,将计数错误,并且甚至会破坏字符,因为它会在中间顺序切割多字节字符。
这是可识别UTF-8的版本:
func substr(input string, start int, length int) string {
asRunes := []rune(input)
if start >= len(asRunes) {
return ""
}
if start+length > len(asRunes) {
length = len(asRunes) - start
}
return string(asRunes[start : start+length])
}