请教:FieldsFunc 函数的用法

go语言中有一个strings包,有一个函数是FieldsFunc func FieldsFunc(s string, f func(rune) bool) []string FieldsFunc splits the string s at each run of Unicode code points c satisfying f(c) and returns an array of slices of s. If all code points in s satisfy f(c) or the string is empty, an empty slice is returned.

有谁给一个关于这个用法的完整例子? 谢谢!

共 4 个回复


gogo

for _, record := range []string{" aaa*1892*122", "aaa\taa\t", "124|939|22"} { fmt.Println(strings.FieldsFunc(record, func(ch rune) bool switch { case ch > '5': return true } return false })) }

# 0

jimmykuu

FieldsFunc用来分割字符串的,传入的那个func处理字符串的每个rune字符,你写代码判断是否符合你的要求,返回ture或flase,如果是true,该字符略去,如果false,会保留,如果几个连续字符都保留,则合并成一个字符串。

就举个简单的例子:把字符串"ab*cd*ef"分割成["ab", "cd", "ef"],这只需要判断字符是否等于“*”,如果等于返回true。

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "ab*cd*ef"
    result := strings.FieldsFunc(s, func(c rune) bool {
        if c == '*' {
            return true
        }

        return false
    })

    fmt.Println(result)

    for i, v := range result {
        fmt.Println(i, v)
    }
}

输出结果如下:

[ab cd ef]
0 ab
1 cd
2 ef

PS:这里的编辑器实用的Markdown,贴代码的时候缩进4个空格或者一个Tab就可以格式化,贴完后看下下面的预览

# 1

gogo

谢谢呀, 我说每次贴代码怎样都弄成一行了。 Markdown这个我会。

# 2

gogo

//相当于用函数做为参数,支持匿名函数

    for _, record := range []string{" aaa*1892*122", "aaa\taa\t", "124|939|22"} {
        fmt.Println(strings.FieldsFunc(record, func(ch rune) bool {
            switch {
            case ch > '5':
                return true
            }
            return false
        }))
    }
# 3