我正在查看string.Map必须采用返回符文的映射函数的函数。我想通过调用以下命令来消除解析 false 的符文:unicode.IsPrint()
func Map(mapping func(rune) rune, s string) string
我的函数看起来像这样:
func main() {
func CleanUp(s string) string {
clean := func(r rune) rune {
if unicode.IsPrint(r) || r == rune('\n') {
return r
}
return rune('')
}
strings.Map(clean, s)
}
Run Code Online (Sandbox Code Playgroud)
它应该清理的东西像这样"helloworld ' \x10"来 "helloworld ' "
但rune('')无效。我怎样才能返回一个空白或空的符文?
我找到了这个,https://groups.google.com/forum/#!topic/golang-nuts/YyKlLwuWt3w但据我所知,这些解决方案对我不起作用.
如果你使用将字符串视为slice(str[:20])的方法,它会在字符中间断开,我们得到"ال ".
编辑:我相信我可以编写一个函数并以3的倍数执行,因为符文是int32(32位/(8位/字节)).我首先要检查是否有符文.
我有一个字符串存储为a:
a := `M\u00fcnchen`
fmt.Println(a) // prints "M\u00fcnchen"
b := "M\u00fcnchen"
fmt.Println(b) // prints "München"
Run Code Online (Sandbox Code Playgroud)
有没有办法可以转换a成b?
我正在寻找一种RangeTable从runeGo中获取unicode category()的方法.例如,角色a映射到Ll类别.该unicode软件包指定了所有类别(http://golang.org/pkg/unicode/#pkg-variables),但我没有看到任何方法从给定的类别中查找类别rune.我是否需要RangeTable从rune使用适当的偏移量手动构建?
我们可以通过获取字符串转换的符文切片的长度来获取字符串中符文的数量。
\n\ns := "\xe4\xb8\x96\xe7\x95\x8c"\nrunes := []rune(s)\nfmt.Println(len(runes))\nRun Code Online (Sandbox Code Playgroud)\n\n或者使用包RuneCountInString中的函数unicode/utf8。
fmt.Println(utf8.RuneCountInString(s))\nRun Code Online (Sandbox Code Playgroud)\n\n两者有什么区别?
\n我们如何使用带有超出我认为代码点 U+265F 的符文文字的表情符号?
a1 := '\u2665'
a2 := '\u1F3A8'
有没有办法将位置较高的表情符号表示为符文文字?
package main
var lettersLower = []rune("abcdefghijklmnopqrstuvwxyz")
var lettersUpper = []rune("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
func main() {
x := append(lettersLower, lettersUpper)
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?我怎么能追加lettersLower和lettersUpper?
prog.go:7: cannot use lettersUpper (type []rune) as type rune in append
Run Code Online (Sandbox Code Playgroud)
当我有一个字符串"hogemogehogemogehogemoge世界世界世界"哪个代码更好,以避免内存分配得到最后的符文?
关于获取Golang String的最后X个字符有类似的问题.
如果我只是想获得最后一个符文,我想确定哪个是首选的,没有任何额外的操作.
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
// which is more better for memory allocation?
s := "hogemogehogemogehogemoge??????a"
getLastRune(s, 3)
getLastRune2(s, 3)
}
func getLastRune(s string, c int) {
// DecodeLastRuneInString
j := len(s)
for i := 0; i < c && j > 0; i++ {
_, size := utf8.DecodeLastRuneInString(s[:j])
j -= size
}
lastByRune := s[j:]
fmt.Println(lastByRune)
}
func getLastRune2(s string, c int) {
// string -> []rune
r := …Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么我转换相同,当有不同容量string的[]rune?
看看这个代码
package main
import (
"fmt"
)
func main() {
input := "??"
runes := []rune(input)
fmt.Printf("len %d\n", len(input))
fmt.Printf("len %d\n", len(runes))
fmt.Printf("cap %d\n", cap(runes))
fmt.Println(runes[:3])
}
Run Code Online (Sandbox Code Playgroud)
哪个返回
len 6
len 2
cap 2
panic: runtime error: slice bounds out of range [:3] with capacity 2
Run Code Online (Sandbox Code Playgroud)
但是当评论fmt.Println(runes[:3])它返回时:
len 6
len 2
cap 32
Run Code Online (Sandbox Code Playgroud)
看看 [] 符文容量如何从 2 变为 32。如何?为什么 ?
如果你想测试 =>去游乐场
我正在从 C 背景自学 Go。下面的代码按我的预期工作(前两个Printf()将访问字节,后两个Printf()将访问代码点)。
我不清楚的是这是否涉及任何数据复制。
package main
import "fmt"
var a string
func main() {
a = "èe"
fmt.Printf("%d\n", a[0])
fmt.Printf("%d\n", a[1])
fmt.Println("")
fmt.Printf("%d\n", []rune(a)[0])
fmt.Printf("%d\n", []rune(a)[1])
}
Run Code Online (Sandbox Code Playgroud)
换句话说:
确实
[]rune("string")创建了一个符文数组并用对应的符文填充它"string",或者只是编译器弄清楚如何从字符串字节中获取符文?