web-dev-qa-db-fra.com

Comment comparer les chaînes dans GoLang?

Je suis incapable de produire un résultat "vrai" en matière de comparaison de chaînes Go. J'ai écrit ce qui suit pour expliquer le problème et joint une capture d'écran de la sortie

// string comparison in Go
package main
import "fmt"
import "bufio"
import "os"

func main() {
    var isLetterA bool 

    fmt.Println("Enter the letter a")
    reader := bufio.NewReader(os.Stdin)
    input, _ := reader.ReadString('\n')

    if(input == "a") {
        isLetterA = true
    } else {
        isLetterA = false 
    }

    fmt.Println("You entered",input)
    fmt.Println("Is it the letter a?",isLetterA)

}

example

68
user2202911

_==_ est l'opérateur approprié pour comparer les chaînes dans Go. Toutefois, les chaînes que vous lisez dans STDIN avec _reader.ReadString_ ne contiennent pas _"a"_, mais _"a\n"_ (si vous regardez de plus près, vous verrez un saut de ligne supplémentaire dans votre exemple de sortie).

Vous pouvez utiliser la fonction strings.TrimRight pour supprimer les espaces blancs de fin de votre entrée:

_if strings.TrimRight(input, "\n") == "a" {
    // ...
}
_
102
helmbert

Pour les utilisateurs indépendants de la plate-forme ou les utilisateurs Windows, vous pouvez:

durée d'importation:

import (
    "runtime"
    "strings"
)

puis coupez la chaîne comme ceci:

if runtime.GOOS == "windows" {
  input = strings.TrimRight(input, "\r\n")
} else {
  input = strings.TrimRight(input, "\n")
}

maintenant vous pouvez le comparer comme ça:

if strings.Compare(input, "a") == 0 {
  //....yourCode
}

C'est une meilleure approche lorsque vous utilisez STDIN sur plusieurs plates-formes.

Explication

Cela se produit parce que sur les lignes Windows se termine par "\r\n" qui est appelé CRLF, alors que sur les lignes UNIX se termine par "\n" qui est appelé LF et que nous ajustons donc "\n" sur les systèmes d’exploitation unix alors que nous ajustons "\r\n" sur Windows.

5
Daksh Miglani

Le contenu des chaînes dans Golang peut être comparé à l'aide de l'opérateur ==. Si les résultats ne sont pas conformes à vos attentes, il peut y avoir des caractères cachés tels que \n, \r, des espaces, etc. Donc, en règle générale, essayez de supprimer les fonctions fournies par strings paquet en golang.

Par exemple, les espaces peuvent être supprimés à l'aide de la fonction strings.TrimSpace. Vous pouvez également définir une fonction personnalisée pour supprimer tout caractère dont vous avez besoin. La fonction strings.TrimFunc peut vous donner plus de puissance.

0