我有下面的代码,它应该将rune
转换为string
并打印出来。然而,我得到未定义的字符时,它是打印。我不知道bug在哪里:
package main
import (
"fmt"
"strconv"
"strings"
"text/scanner"
)
func main() {
var b scanner.Scanner
const a = `a`
b.Init(strings.NewReader(a))
c := b.Scan()
fmt.Println(strconv.QuoteRune(c))
}
6条答案
按热度按时间unhi4e5o1#
这是因为你使用
Scanner.Scan()
来读取rune
,但它做了别的事情。Scanner.Scan()
可以用来读取由Scanner.Mode
位掩码控制的 tokens 或rune
s特殊tokens,它返回text/scanner
包中的特殊常量,而不是读取的rune本身。要读取单个
rune
,请使用Scanner.Next()
:输出量:
如果您只想将单个
rune
转换为string
,请使用简单的类型转换。rune
是int32
的别名,将整数转换为string
:将有符号或无符号整数值转换为字符串类型会生成一个包含该整数的UTF-8表示形式的字符串。
所以:
输出:
同样,要在
string
值的字符串上循环,您可以简单地使用for ... range
结构:输出量:
或者,您可以简单地将
string
值转换为[]rune
:还有
utf8.DecodeRuneInString()
。在Go Playground上尝试示例。
注:
您的原始代码(使用
Scanner.Scan()
)如下所示:1.调用
Scanner.Init()
,将Mode(b.Mode
)设置为scanner.GoTokens
。1.在输入上调用
Scanner.Scan()
(从"a"
)返回scanner.Ident
,因为"a"
是一个有效的Go标识符:7nbnzgx92#
我知道我有点迟到了,但这里有一个[]rune to string函数:
是的,有一个命名的return,但我认为它在这种情况下是好的,因为它减少了行数,函数只是短
7fhtutme3#
这段简单的代码可以将一个符文转换为字符串
mf98qq944#
自从我来到这个问题搜索符文和字符串和字符,认为这可能会帮助像我这样的新手
还有一些毫无意义的演示https://play.golang.org/p/tagRBVG8k7V改编自https://groups.google.com/g/golang-nuts/c/84GCvDBhpbg/m/Tt6089MPFQAJ
以显示“字符”根据unicode代码点用1到4个字节编码
r6hnlfcb5#
可以使用字符串函数
Go playground
8iwquhpp6#
下面是一个简单的例子:
go playground