我在看string.Map函数,它必须接受一个映射函数,它返回一个符文。我想通过调用:unicode.IsPrint()来消除那些解析为false的runes
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)
}它应该把像"helloworld ' \x10"这样的东西清理成"helloworld ' "
但是rune('')是无效的。我如何返回空白或空符文?
发布于 2018-09-04 21:35:51
如果你想消除符文,一个“空白符文”不是要走的路。这不会消除任何东西。
假设你说的是strings.Map,医生说
如果映射返回一个负值,则该字符将从字符串中删除,不需要替换。
让映射器返回一个负值,以指示应丢弃符文。
发布于 2018-09-04 21:30:52
据我所知,rune实际上是映射到unicode字符的整数值,因此,如果条件检查失败,这段代码实际上返回\0字符:
package main
import (
"fmt"
"strings"
"unicode"
)
func main() {
fmt.Println(CleanUp("helloworld ' \x10"))
}
func CleanUp(s string) string {
clean := func(r rune) rune {
if unicode.IsPrint(r) || r == rune('\n') {
return r
}
return rune(0)
}
return strings.Map(clean, s)
}输出
helloworld '
发布于 2021-07-05 03:09:06
下面是一个使用负返回值的示例:
package main
import (
"strings"
"unicode"
)
func clean(r rune) rune {
if r == '\n' || unicode.IsPrint(r) {
return r
}
return -1
}
func main() {
s := strings.Map(clean, "helloworld ' \x10")
println(s == "helloworld ' ")
}https://stackoverflow.com/questions/52174097
复制相似问题