strings.TrimFunc în Go

Scoate de la capete caracterele pentru care funcția dată returnează true (la ambele capete, la început sau la sfârșit).

Sintaxă
func TrimFunc(s string, f func(rune) bool) string
func TrimLeftFunc(s string, f func(rune) bool) string
func TrimRightFunc(s string, f func(rune) bool) string

Ce face strings.TrimFunc

strings.TrimFunc(s, f) elimină de la ambele capete caracterele pentru care f returnează true, până la primul caracter care nu respectă condiția. TrimLeftFunc lucrează doar la început, TrimRightFunc doar la sfârșit.

Sunt utile când setul de caractere este descris mai ușor printr-o regulă: „tot ce nu este literă”, „cifrele”, „semnele de punctuație” (unicode.IsPunct).

Parametri

Parametru Descriere
s Textul.
f Condiția: true pentru caracterele de eliminat.

Ce returnează

Textul curățat la capete.

Exemple

Exemplul 1: Curățarea cuvintelor de punctuație

package main

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

func main() {
	for _, c := range strings.Fields("«Bună», ziua... (Ana)!") {
		fmt.Printf("%-10q -> %q\n", c, strings.TrimFunc(c, unicode.IsPunct))
	}
}

Rezultat

"«Bună»,"  -> "Bună"
"ziua..."  -> "ziua"
"(Ana)!"   -> "Ana"

Exemplul 2: Doar la un capăt

package main

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

func main() {
	cod := "0042AB-77"
	fmt.Println(strings.TrimLeftFunc(cod, func(r rune) bool { return r == '0' }))
	fmt.Println(strings.TrimRightFunc(cod, unicode.IsDigit))
	fmt.Println(strings.TrimFunc(cod, unicode.IsDigit))
}

Rezultat

42AB-77
0042AB-
AB-

Greșeli frecvente

  • Te aștepți ca TrimFunc să scoată caracterele și din mijloc. Lucrează doar la capete; pentru tot textul folosește strings.Map sau strings.FieldsFunc.

Comenzi înrudite

  • strings.Trim: Scoate de la capete orice caracter din setul dat: Trim la ambele capete, TrimLeft doar la început, TrimRight doar la sfârșit.
  • strings.TrimSpace: Scoate spațiile albe (spații, tab, rânduri noi) de la începutul și sfârșitul textului.
  • strings.IndexAny: Poziția primului sau ultimului caracter dintr-un set (IndexAny) ori care respectă o condiție (IndexFunc); -1 dacă nu există.
  • unicode.IsLetter: Verifică tipul unui caracter: literă, cifră, număr, spațiu alb sau semn de punctuație, după regulile Unicode.