如何 return 一个空白符文

How to return a blank rune

我正在查看 string.Map 函数,它必须采用 return 符文的映射函数。我想通过调用来消除解析为 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)
}

它应该像这样清理 "helloworld ' \x10""helloworld ' "

但是rune('')无效。我怎样才能 return 一个空白或空符文?

据我了解,符文实际上是一个映射到 unicode 字符的整数值,所以如果条件检查失败,这段代码实际上 returns [=11=] 字符:

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 '

如果你想消除符文,"blank rune"不是办法。那不会消除任何东西。

假设您说的是 strings.Map,文档说

If mapping returns a negative value, the character is dropped from the string with no replacement.

让你的映射器 return 一个负值来表示应该丢弃一个符文。

这是一个使用负 return 值的示例:

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 ' ")
}