0
votes

Comment à Golang pour supprimer la dernière lettre de la chaîne?

disons que j'ai une chaîne appelée varstring . xxx

question : Comment supprimer la dernière lettre de la chaîne? Dans mon cas, c'est la deuxième virgule.

go

3 commentaires

varstring = varstring [: len (var) -1]


Terminologie Nitpick: , n'est pas une lettre :)


@gefingok: pour len (varstring) == 0 , vous allez panique . Pour les caractères non ascii, votre résultat sera faux.


4 Réponses :


0
votes

quelque chose comme ceci: xxx

Notez que cela ne fonctionne pas si le dernier caractère n'est pas représenté par un seul octet.


1 commentaires

ALERTE: Les chaînes de caractères Go sont codées UTF-8. Cette réponse ne fonctionne que pour les caractères ASCII.



3
votes

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

1 commentaires

taille == 0 semble être redondant



0
votes

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])
}


4 commentaires

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.



0
votes
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.

0 commentaires