back to back unicode.letter セットに属しているかどうかを各末尾の文字ごとにチェックすると、次の結果が得られましたが、これはうまく機能しますが、これを行うためのより良い、またはより効率的な方法があるかどうか知りたいですか? strings.trimleft/right を試しましたが、削除する独自の文字セットを定義する必要がありました。事前定義されたコレクションを使用すると便利です。 funcTrimWord(word[]rune)string{varprefixint"/> back to back unicode.letter セットに属しているかどうかを各末尾の文字ごとにチェックすると、次の結果が得られましたが、これはうまく機能しますが、これを行うためのより良い、またはより効率的な方法があるかどうか知りたいですか? strings.trimleft/right を試しましたが、削除する独自の文字セットを定義する必要がありました。事前定義されたコレクションを使用すると便利です。 funcTrimWord(word[]rune)string{varprefixint">

ホームページ  >  記事  >  バックエンド開発  >  単語から特殊文字を削除する

単語から特殊文字を削除する

WBOY
WBOY転載
2024-02-06 10:48:08830ブラウズ

単語から特殊文字を削除する

问题内容

我正在用 go 编写一个函数来清理单个单词,从而删除每个单词开头和结尾的特殊字符。

即:

  • .-你好,->你好
  • “背靠背”->背靠背

通过逐个字母检查每一端是否属于 unicode.letter 集,得到以下结果,效果很好,但我想知道是否有更好或更有效的方法来做到这一点?我尝试了 strings.trimleft/right,但随后我必须定义自己的一组要删除的字符。如果使用预定义的集合就好了。

func TrimWord(word []rune) string {
    var prefix int = 0
    var suffix int = len(word)

    for x := 0; x < len(word); x++ {
        if !unicode.IsLetter(word[x]) {
            prefix++
        } else {
            break
        }
    }

    for x := len(word) - 1; x >= 0; x-- {
        if suffix == prefix {
            break
        }
        if !unicode.IsLetter(word[x]) {
            suffix--
        } else {
            break
        }
    }
    return string(word[prefix:suffix])
}

正确答案


package main

import (
    "fmt"
    "strings"
    "unicode"
)

func trimword(s string) string {
    return strings.trimfunc(s, func(r rune) bool {
        return !unicode.isletter(r)
    })
}

func main() {
    fmt.println(trimword(`.-hello,`))       // -> hello
    fmt.println(trimword(`"back-to-back"`)) // -> back-to-back
}

https://www.php.cn/link/55053683268957697aa39fba6f231c68

hello
back-to-back

包字符串

func TrimFunc(s string, f func(rune) bool) string

trimfunc 返回字符串 s 的一个切片,其中删除了满足 f(c) 的所有前导和尾随 unicode 代码点 c。

以上が単語から特殊文字を削除するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。