Golang中处理带空格的字符串问题

Golang中处理带空格的字符串问题 大家好, 如何读取包含空格的完整字符串?请提供帮助。

package main

import "fmt"

func main() {
    var name string
    fmt.Print("Enter full name : ")
    fmt.Scan(&name)
    fmt.Println("The full name is-", name)
}

这里如果我输入:Go Program 得到的输出是 "The full name is- Go"

谢谢!

7 回复

fmt.Scanln 实际上不起作用。它仍然不考虑空格。

更多关于Golang中处理带空格的字符串问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Scan 用于读取以空格分隔的标记,您无法按您想要的方式使用它。

只需使用标准输入读取器即可。

func main() {
    fmt.Println("hello world")
}

建议使用 fmt.Scanln 替代。它会读取输入直到下一个换行符。而 fmt.Scan 只会读取到下一个空格(或最先出现的换行符)

哇,非常感谢Jayts,这个方法对我有效。现在我需要理解这段代码,对我来说看起来有点复杂和高级。

当你有时间的时候,能否帮我理解以下几行代码:

stdin = bufio.NewReader(os.Stdin)
fmt.Printf("Type something: ")

for {
    c, _, err = stdin.ReadRune()
    if err == io.EOF || c == '\n' { break }
    if err != nil {
        fmt.Fprintf(os.Stderr,"Error reading standard input\n")
        os.Exit(1)
    }
    line = append(line,c)
}

以下是实现方法之一。我使用了 ReadRune() 来展示一些额外细节。你可能更倾向于使用 bufio.ReadString() 或 bufio.ReadBytes()。

package main

import (
        "fmt"
        "bufio"
        "io"
        "os"
)


func main() {

        var stdin *bufio.Reader
        var line []rune
        var c rune
        var err error

        stdin = bufio.NewReader(os.Stdin)

        fmt.Printf("Type something: ")

        for {
                c, _, err = stdin.ReadRune()
                if err == io.EOF || c == '\n' { break }
                if err != nil {
                        fmt.Fprintf(os.Stderr,"Error reading standard input\n")
                        os.Exit(1)
                }
                line = append(line,c)
        }

        fmt.Printf("\nYou entered: %s\n",string(line[:len(line)]))
}

我的错误是Scanln被调用时使用了多个参数,每个参数之间应该用空格分隔

fmt.Scanln(&a, &b, &c) 如果你输入"Home sweet home",那么 a == “Home”、b == “sweet”、c == “home”。你可以改用bufio包中的Scanner

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {

	scanner := bufio.NewScanner(os.Stdin)
	fmt.Print("> ")
	if scanner.Scan() {
		fmt.Printf("You wrote \"%s\"\n", scanner.Text())
	}
}

现在你也可以循环获取每一行输入

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {

	scanner := bufio.NewScanner(os.Stdin)
	fmt.Print("> ")
	for scanner.Scan() {
		fmt.Printf("You wrote \"%s\"\n", scanner.Text())
		fmt.Print("> ")
	}
}

在Go语言中,fmt.Scan 默认会以空格作为分隔符,因此无法读取包含空格的完整字符串。你可以使用 bufio 包中的 ScannerReadString 方法来处理这种情况。以下是两种解决方案:

使用 bufio.Scanner

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    scanner := bufio.NewScanner(os.Stdin)
    fmt.Print("Enter full name: ")
    if scanner.Scan() {
        name := scanner.Text()
        fmt.Println("The full name is-", name)
    }
}

使用 bufio.ReaderReadString 方法

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter full name: ")
    name, _ := reader.ReadString('\n')
    fmt.Println("The full name is-", name)
}

这两种方法都会读取整行输入,包括空格,直到遇到换行符。注意,ReadString 方法会包含换行符在结果中,如果需要去除,可以使用 strings.TrimSpace(name)

回到顶部