6

我正在查看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('')无效。如何返回空白符文或空符文?

4

3 回答 3

5

如果你想消除符文,“空白符文”不是要走的路。那不会消除任何东西。

假设你在谈论strings.Map,文档说

如果映射返回负值,则从字符串中删除该字符而不进行替换。

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

于 2018-09-04T21:35:51.400 回答
3

\0据我了解,rune 实际上是一个映射到 unicode 字符的整数值,因此如果条件检查失败,这段代码实际上会返回该字符:

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 '

于 2018-09-04T21:30:52.820 回答
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 ' ")
}
于 2021-07-05T03:09:06.820 回答