【问题标题】:How to return a blank rune如何返回空白符文
【发布时间】:2018-09-04 21:15:54
【问题描述】:

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

【问题讨论】:

  • 尝试声明一个符文,不给它一个值并返回它golang.org/doc/go1#rune
  • 已经试过了:missing argument to conversion to rune: rune()

标签: go rune


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    据我了解,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 '

    【讨论】:

    • 我在测试中看到了这一点:预期:“hello '” 实际:“hello ' \x00”
    • 在这里试一试:play.golang.org/p/UNH02IuXQJL 适用于我的 yo 示例
    • 我使用了游乐场,但我的测试显示了不同的结果,包括 \x00,rune(-1) 有效
    • rune(0) 部分是我想要创建一个空白符文的部分
    【解决方案3】:

    这里是一个使用负返回值的例子:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-02-16
      • 2018-12-23
      • 2011-12-19
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 1970-01-01
      相关资源
      最近更新 更多