String 删除Golang中周围的双引号或单引号
String 删除Golang中周围的双引号或单引号,string,go,String,Go,strconv.Unquote不应该同时处理单引号和双引号吗 另见第350行 但是,以下代码返回一个语法错误: s,err:=strconv.Unquote(`test`) 如果出错!=零{ fmt.Println(错误) }否则{ fmt.Println(s) } 但双引号的作用与预期一样: 我缺少什么?临时解决方案: func trimQuotes(s string) string { if len(s) >= 2 { switch {
strconv.Unquote
不应该同时处理单引号和双引号吗
另见第350行
但是,以下代码返回一个语法错误
:
s,err:=strconv.Unquote(`test`)
如果出错!=零{
fmt.Println(错误)
}否则{
fmt.Println(s)
}
但双引号的作用与预期一样:
我缺少什么?临时解决方案:
func trimQuotes(s string) string {
if len(s) >= 2 {
switch {
case s[0] == '"' && s[len(s)-1] == '"':
return s[1 : len(s)-1]
case s[0] == '\'' && s[len(s)-1] == '\'':
return s[1 : len(s)-1]
}
}
return s
}
strconv.Unquote
可以正确地处理单引号和双引号,但它并不打算以代码段调用它的方式使用。它用于处理go源代码时遇到字符串文本的情况。单引号大小写对单个字符有效,而不是字符串。在go源文件中,如果尝试对多字符串文字使用单引号,则会出现类似于非法符文文字的编译器错误
您可以使用strings.Trim
函数来处理从字符串开头和结尾删除引号的操作
s := strings.Trim(`'test'`, `'"`)
fmt.Println(s)
标准库中没有您想要的现成函数
您介绍的内容有效,但我们可以使其更简单(并且可能更有效):
测试它:
fmt.Println(trimQuotes(`'test'`))
fmt.Println(trimQuotes(`"test"`))
fmt.Println(trimQuotes(`"'test`))
输出(在上尝试):
Unquote用于Go语法文字。从:如果s是单引号,它将是一个Go字符文本
为什么不使用字符串。替换?此外,在99%的情况下,如果您不使用“else-if”,则在Go中使用switch
语句更为惯用。在某些情况下,它们可能会稍微紧凑一些(特别是字符串if|
子句,因为您可以在同一个开关中用逗号分隔它们),并且通常更易于阅读。从编译器的角度来看,两者完全相同,因此这纯粹是一个可读性问题。使用条件的示例:@Kaedys-becauseOrig:'te“st'| unquote:test
更新为使用switch而不是if/else-感谢您的评论,但是任何人都可以看到Replace
根本不提供相同的行为。无论如何,@jimB提供了预期的答案,如果他将其作为答案发布,我很乐意接受。strings.Trim()
的问题是,它会将“'abc
变成abc
,即使在这种情况下,asker希望它保持”“'abc
。尽管你的答案与我的答案几乎相同,除了对我投的反对票
func trimQuotes(s string) string {
if len(s) >= 2 {
if c := s[len(s)-1]; s[0] == c && (c == '"' || c == '\'') {
return s[1 : len(s)-1]
}
}
return s
}
fmt.Println(trimQuotes(`'test'`))
fmt.Println(trimQuotes(`"test"`))
fmt.Println(trimQuotes(`"'test`))
test
test
"'test