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"
谢谢!
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 包中的 Scanner 或 ReadString 方法来处理这种情况。以下是两种解决方案:
使用 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.Reader 的 ReadString 方法
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)。

