首页 >后端开发 >Golang >如何在 Go 中使用 fmt.Scanln 解析空格分隔的字符串?

如何在 Go 中使用 fmt.Scanln 解析空格分隔的字符串?

Linda Hamilton
Linda Hamilton原创
2024-11-04 01:58:01559浏览

How to Parse Space-Separated Strings with fmt.Scanln in Go?

如何使用 fmt.scanln 解析空格分隔的字符串

fmt.scanln 是一个用于从标准输入读取输入并扫描的函数将其转化为结构化变量。然而,当读取以空格分隔的字符串时,可能会遇到一些意想不到的行为。

默认情况下,fmt.scanln 在第一个换行符处停止扫描。这可能会导致用户输入包含多个空格分隔单词的字符串,但仅捕获第一个单词的情况。

例如,考虑以下代码:

<code class="go">package main

import "fmt"

func main() {
    var s string
    fmt.Scanln(&s)
    fmt.Println(s)
    return
}</code>

当用户输入“31 of Month”,只有“31”被捕获到 s 变量中。出现这种情况是因为 fmt.scanln 在遇到空格字符(空白字符)后停止扫描。

要解决此问题并捕获多个空格分隔的单词,您可以执行以下任一操作:

  1. 使用多个 fmt.Scanln语句:

    • 此方法涉及多次调用 fmt.Scanln 来单独捕获每个单词。
    <code class="go">package main
    
    import "fmt"
    
    func main() {
        var s1 string
        var s2 string
        fmt.Scanln(&s1, &s2)
        fmt.Println(s1)
        fmt.Println(s2)
        return
    }</code>
  2. 使用缓冲扫描仪:

    • 此替代方案使用缓冲扫描仪读取整行输入,然后解析空格分隔的单词。
    <code class="go">package main
    
    import (
        "bufio"
        "fmt"
        "os"
    )
    
    func main() {
        scanner := bufio.NewScanner(os.Stdin)
        for scanner.Scan() {
            s := scanner.Text()
            fmt.Println(s)
        }
        if err := scanner.Err(); err != nil {
            os.Exit(1)
        }
    }</code>

以上是如何在 Go 中使用 fmt.Scanln 解析空格分隔的字符串?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn