"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Pourquoi « reader.ReadString » ne supprime-t-il pas le délimiteur initial ?

Pourquoi « reader.ReadString » ne supprime-t-il pas le délimiteur initial ?

Publié le 2024-12-21
Parcourir:301

Why Doesn't `reader.ReadString` Remove the Initial Delimiter?

reader.ReadString ne supprime pas le délimiteur initial

Dans le but de créer un programme qui accueille les utilisateurs nommés Alice ou Bob, un développeur a rencontré un problème où même les noms légitimes déclenchaient une réponse indésirable. Le programme a refusé à tort l'entrée à Alice et Bob.

Le problème

Le problème provient de l'utilisation de reader.ReadString('\n') dans le programme . Cette fonction récupère les caractères jusqu'à ce qu'un caractère de nouvelle ligne soit rencontré. Cependant, il ne supprime pas automatiquement le délimiteur de la chaîne renvoyée, ce qui entraîne l'inclusion d'une nouvelle ligne supplémentaire dans la saisie de l'utilisateur.

Solution

Pour résoudre ce problème , il existe deux approches possibles :

1. Coupez la nouvelle ligne

Utilisez la fonction strings.TrimSpace pour supprimer tout espace de début ou de fin de la chaîne d'entrée avant de l'évaluer. Cela supprime efficacement le caractère de nouvelle ligne à l'origine du problème.

if aliceOrBob(strings.TrimSpace(text)) {
    fmt.Printf("Hello, ", text)
}

2. Utilisez ReadLine au lieu de ReadString

Alternativement, la fonction ReadLine peut être utilisée à la place de ReadString. ReadLine récupère une ligne de texte sans inclure le caractère de nouvelle ligne dans la chaîne renvoyée.

text, _, _ := reader.ReadLine()
if aliceOrBob(string(text)) {
    fmt.Printf("Hello, ", text)
}

Explication

La raison de l'utilisation de string(text) avec ReadLine est que ReadLine renvoie une tranche d'octets, tandis qu'aliceOrBob nécessite un argument de chaîne.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3