如何退回空白符文

时间:2018-09-04 21:15:54

标签: go rune

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

3 个答案:

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