disons que j'ai une chaîne appelée question strong>: Comment supprimer la dernière lettre de la chaîne? Dans mon cas, c'est la deuxième virgule. P> p> varstring code>.
4 Réponses :
quelque chose comme ceci: Notez que cela ne fonctionne pas si le dernier caractère n'est pas représenté par un seul octet. p> p>
ALERTE: Les chaînes de caractères Go sont codées UTF-8. Cette réponse ne fonctionne que pour les caractères ASCII.
Comment supprimer la dernière lettre de la chaîne? p>
in va, les chaînes de caractères sont codées UTF-8. Unicode UF-8 est un codage de caractères de longueur variable qui utilise un à quatre octets par Caractère Unicode (point de code). P>
Par exemple, P>
Bob,Mark, Bob,Mark
taille == 0 code> semble être redondant
Voici une méthode beaucoup plus simple qui fonctionne aussi pour les chaînes Unicode aussi:
func removeLastRune(s string) string {
r := []rune(s)
return string(r[:len(r)-1])
}
Alerte: C'est un très inefficace. Si gaspille le temps de processeur et la mémoire en convertissant inutilement la corde en une tranche de rings et la tranche de runes à une chaîne.
@peterso admet, mais cela devrait être important si la chaîne d'entrée est suffisamment grande. La plupart du cas, cette solution fera le travail très bien.
Votre réponse n'est pas «très bien». C'est terrible. Pour la chaîne de 9 caractères de la question, il est 76,8 contre 4,51 ns / op, 17 fois moins efficace. Pour une chaîne de 99 caractères, il est 979 versus 4.50 NS / OP, 217 fois moins efficace et 528 B / OP par rapport à 0 B / OP. Maintenant, multipliez cela par Google Balance.
@peterso, je suis certainement d'accord avec le fait que votre solution est plus efficace que la mienne, mais ici, j'ai montré une solution «plus simple», pas plus rapide. Et je pense que ce n'est pas vrai que la vitesse d'un programme importe, surtout lorsqu'il jugeait la solution des autres terrible ou non.
newStr := strings.TrimRightFunc(str, func(r rune) bool {
return !unicode.IsLetter(r) // or any other validation can go here
})
This will trim anything that isn't a letter on the right hand side.
varstring = varstring [: len (var) -1]
Terminologie Nitpick:
, code> n'est pas une lettre :)@gefingok: pour
len (varstring) == 0 code>, vous allezpanique code>. Pour les caractères non ascii, votre résultat sera faux.