J'essaie de lire une ligne entière à partir de la console (y compris les espaces), puis de la traiter. À l'aide de bufio.ReadString, le caractère de nouvelle ligne est lu en même temps que l'entrée. J'ai donc créé le code suivant pour découper le caractère de nouvelle ligne:
input,_:=src.ReadString('\n')
inputFmt:=input[0:len(input)-2]+"" //Need to manually add end of string
Y a-t-il un moyen plus idiomatique de faire cela? C'est-à-dire, existe-t-il déjà une bibliothèque qui s'occupe de l'octet nul final lors de l'extraction de sous-chaînes pour vous?
(Oui, je sais qu'il existe déjà un moyen de lire une ligne sans le caractère de nouvelle ligne dans go readline -> string mais je recherche davantage une manipulation élégante des chaînes.)
Il semble que le fonctionnement des tranches et le format de stockage de la chaîne, qui diffère de ce que vous avez en C., vous déroutent.
len
: il n'est pas nécessaire de compter1
après le découpage en ajoutant une chaîne vide.Pour supprimer le dernier caractère (s'il s'agit d'un caractère d'un octet), faites simplement
inputFmt:=input[:len(input)-1]
Les chaînes de caractères Go ne sont pas terminées par un caractère null, et pour supprimer le dernier caractère d'une chaîne, vous pouvez simplement faire:
s = s[:len(s)-1]
Pour éviter une panique sur une entrée de longueur nulle, encapsulez l'opération de tronquage dans un if
input, _ := src.ReadString('\n')
var inputFmt string
if len(input) > 0 {
inputFmt = input[:len(input)-1]
}
// Do something with inputFmt
Pour obtenir une sous-chaîne
trouver la position de "sp"
chaîne de coupe avec tableau logique
AVERTISSEMENT: les opérations sur les chaînes seules ne fonctionneront qu'avec ASCII et seront considérées comme fausses si la saisie est un caractère encodé en UTF-8 non-ASCII.
Voici une version compatible UTF-8:
func substr(input string, start int, length int) string {
asRunes := []rune(input)
if start >= len(asRunes) {
return ""
}
if start+length > len(asRunes) {
length = len(asRunes) - start
}
return string(asRunes[start : start+length])
}
C’est le simple pour effectuer une sous-chaîne dans Go
package main
import "fmt"
var p = fmt.Println
func main() {
value := "address;bar"
// Take substring from index 2 to length of string
substring := value[2:len(value)]
p(substring)
}