我在Golang中有一个由引号括起来的字符串。我的目标是删除边上的所有引号,但忽略字符串内部的所有引号。我该怎么做呢?我的直觉告诉我使用像C#中的RemoveAt函数,但我在Go中看不到类似的东西。
例如:
"hello""world"
应转换为:
hello""world
为进一步澄清,请:
"""hello"""
会变成这样:
""hello""
因为只应移除外部的那些。
答案 0 :(得分:21)
s = s[1 : len(s)-1]
如果引号可能不存在,请使用:
if len(s) > 0 && s[0] == '"' {
s = s[1:]
}
if len(s) > 0 && s[len(s)-1] == '"' {
s = s[:len(s)-1]
}
答案 1 :(得分:2)
您可以利用切片删除切片的第一个和最后一个元素。
package main
import "fmt"
func main() {
str := `"hello""world"`
if str[0] == '"' {
str = str[1:]
}
if i := len(str)-1; str[i] == '"' {
str = str[:i]
}
fmt.Println( str )
}
由于切片共享底层内存,因此不会复制该字符串。它只是更改str
切片以开始一个字符,并更快结束一个字符。
这就是the various bytes.Trim functions的工作方式。
答案 2 :(得分:2)
使用slice expressions。您应该编写可靠的代码,为不完美的输入提供正确的输出。例如,
package main
import "fmt"
func trimQuotes(s string) string {
if len(s) >= 2 {
if s[0] == '"' && s[len(s)-1] == '"' {
return s[1 : len(s)-1]
}
}
return s
}
func main() {
tests := []string{
`"hello""world"`,
`"""hello"""`,
`"`,
`""`,
`"""`,
`goodbye"`,
`"goodbye"`,
`goodbye"`,
`good"bye`,
}
for _, test := range tests {
fmt.Printf("`%s` -> `%s`\n", test, trimQuotes(test))
}
}
输出:
`"hello""world"` -> `hello""world`
`"""hello"""` -> `""hello""`
`"` -> `"`
`""` -> ``
`"""` -> `"`
`goodbye"` -> `goodbye"`
`"goodbye"` -> `goodbye`
`goodbye"` -> `goodbye"`
`good"bye` -> `good"bye`
答案 3 :(得分:1)
Strings.trim()可用于从字符串中删除开头和结尾的空格。如果在字符串之间使用双引号,则不会起作用。
Property 'id' does not exist on type 'Maybe<HostelId>[]'.
答案 4 :(得分:0)
使用正则表达式的单行代码...
quoted = regexp.MustCompile(`^"(.*)"$`).ReplaceAllString(quoted,`$1`)
但是它不一定按照您希望的方式处理转义引号。