You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Golang中使用Scanf系列函数读取最多x个字符的字符串?

在Golang中限制输入字符串长度为最多x个字符的实现方法

用fmt.Scanf直接限制非空白字符长度

可以直接通过fmt.Scanf的格式符指定最多读取的字符数,格式为%Ns(N为你要限制的最大长度,比如5),它会读取最多N个非空白字符,遇到空格、换行等空白符时停止扫描。

示例代码:

package main

import "fmt"

func main() {
	var s string
	// 读取最多5个非空白字符
	_, err := fmt.Scanf("%5s", &s)
	if err != nil {
		fmt.Println("读取错误:", err)
		return
	}
	fmt.Printf("读取到的字符串(最多5个非空白字符):%s\n", s)
}

注意事项:

  • 该方式仅对连续的非空白字符生效,若输入包含空格,扫描会在空格处终止。比如输入hello world,只会读取hello;输入he llo,只会读取he。
  • 如果输入的非空白字符超过N个,多余的字符会留在输入缓冲区中,后续的输入读取操作会读到这些剩余内容。

读取包含空格的最多x个字符

如果需要支持包含空格的输入并限制长度,fmt.Scanf无法直接满足,推荐使用bufio包实现:

方法1:读取整行后截取

先读取用户输入的整行内容,再截取前N个字符:

package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	input, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("读取错误:", err)
		return
	}
	// 去除末尾的换行符
	input = input[:len(input)-1]
	// 限制最多5个字符
	if len(input) > 5 {
		input = input[:5]
	}
	fmt.Printf("读取到的字符串(最多5个字符,含空格):%s\n", input)
}

方法2:正确处理中文的字符数限制

如果需要按实际字符数(而非字节数)限制,支持中文等多字节字符,可以将输入转为rune切片后截取:

package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	input, err := reader.ReadString('\n')
	if err != nil {
		fmt.Println("读取错误:", err)
		return
	}
	input = input[:len(input)-1]
	runes := []rune(input)
	if len(runes) > 5 {
		runes = runes[:5]
	}
	s := string(runes)
	fmt.Printf("读取到的字符串(最多5个字符,支持中文):%s\n", s)
}

内容的提问来源于stack exchange,提问作者hani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 02:55:06