我如何在 Go 语言中比较字符串?

新手上路,请多包涵

在进行 Go 字符串比较时,我无法产生“真实”结果。我写了以下内容来解释这个问题并附上了输出的屏幕截图

// 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)

}

例子

原文由 user2202911 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 422
2 个回答

== 是在 Go 中比较字符串的正确运算符。但是,您使用 reader.ReadString 从 STDIN 读取的字符串不包含 "a" ,但 "a\n" 在您的示例输出中)。

您可以使用 strings.TrimRight 函数从输入中删除尾随空格:

 if strings.TrimRight(input, "\n") == "a" {
    // ...
}

原文由 helmbert 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于 Platform Independent Users 或 Windows 用户,您可以做的是:

导入运行时:

 import (
    "runtime"
    "strings"
)

然后像这样修剪字符串:

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

现在你可以这样比较它:

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

当您在多个平台上使用 STDIN 时,这是一种更好的方法。

解释

发生这种情况是因为在 Windows 上,行以 "\r\n" 结尾,这被称为 CRLF,但在 UNIX 上,行以 "\n" 结尾,这被称为 LF,这就是我们修剪 "\n" 的原因 --- 在基于 unix 的操作系统上,而我们在 Windows 上修剪 "\r\n"

原文由 Daksh M. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏