我正在查看string.Map
函数,该函数必须具有一个返回符文的映射函数。我想通过调用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)
}
它应该将"helloworld ' \x10"
至"helloworld ' "
之类的东西清除
但是rune('')
无效。如何退回空白或空符文?
答案 0 :(得分:3)
如果您想消除符文,那么“空白符文”是行不通的。那不会消除任何东西。
假设您在谈论strings.Map
,
如果映射返回负值,则将字符从字符串中删除,而无需替换。
让您的映射器返回负值以指示应该丢弃符文。
答案 1 :(得分:1)
据我了解,符文实际上是映射到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 '
答案 2 :(得分:0)
这是一个使用负返回值的例子:
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 ' ")
}