J'ai une chaîne à Golang qui est entourée de guillemets. Mon but est d'enlever tous les guillemets sur les côtés, mais d'ignorer tous les guillemets à l'intérieur de la chaîne. Comment devrais-je m'y prendre? Mon instinct me dit d'utiliser une fonction RemoveAt comme en C #, mais je ne vois rien de tel dans Go.
Par exemple:
"hello""world"
devrait être converti en:
hello""world
Pour plus de précisions, ceci:
"""hello"""
deviendrait ceci:
""hello""
parce que les extérieurs doivent être enlevés SEULEMENT.
Utilisez une expression slice :
s = s[1 : len(s)-1]
S'il existe une possibilité que les guillemets ne soient pas présents, utilisez ceci:
if len(s) > 0 && s[0] == '"' {
s = s[1:]
}
if len(s) > 0 && s[len(s)-1] == '"' {
s = s[:len(s)-1]
}
Utilisez expressions slice . Vous devez écrire un code robuste qui fournit une sortie correcte pour une entrée imparfaite. Par exemple,
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))
}
}
Sortie:
`"hello""world"` -> `hello""world`
`"""hello"""` -> `""hello""`
`"` -> `"`
`""` -> ``
`"""` -> `"`
`goodbye"` -> `goodbye"`
`"goodbye"` -> `goodbye`
`goodbye"` -> `goodbye"`
`good"bye` -> `good"bye`
Vous pouvez tirer parti des tranches pour supprimer le premier et le dernier élément de la tranche.
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 )
}
Puisqu'une tranche partage la mémoire sous-jacente, cela ne copie pas la chaîne. Il suffit de changer la tranche str
pour recommencer un caractère et le terminer plus tôt.
Voici comment les différentes fonctions bytes.Trim fonctionnent.