strings.Map în Go

Transformă fiecare caracter al textului cu o funcție; dacă funcția returnează -1, caracterul este șters.

Sintaxă
func Map(mapping func(rune) rune, s string) string

Ce face strings.Map

strings.Map(mapping, s) trece prin fiecare caracter (rune) din s, cheamă mapping și pune în rezultat caracterul returnat. Dacă funcția returnează o valoare negativă (de obicei -1), caracterul este eliminat.

Este potrivită pentru transformări caracter cu caracter: scoaterea diacriticelor, păstrarea doar a cifrelor, cifrul lui Cezar. Funcția primește caracterul întreg, deci lucrează corect și cu litere pe mai mulți octeți.

Parametri

Parametru Descriere
mapping Funcția aplicată fiecărui caracter; returnează caracterul nou sau -1 pentru ștergere.
s Textul inițial.

Ce returnează

Textul transformat.

Exemple

Exemplul 1: Doar cifrele dintr-un număr de telefon

package main

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

func main() {
	doarCifre := func(r rune) rune {
		if unicode.IsDigit(r) {
			return r
		}
		return -1
	}
	fmt.Println(strings.Map(doarCifre, "+40 (721) 000-111"))
}

Rezultat

40721000111

Exemplul 2: Scoaterea diacriticelor

package main

import (
	"fmt"
	"strings"
)

func faraDiacritice(r rune) rune {
	switch r {
	case 'ă', 'â':
		return 'a'
	case 'î':
		return 'i'
	case 'ș':
		return 's'
	case 'ț':
		return 't'
	case 'Ă', 'Â':
		return 'A'
	case 'Î':
		return 'I'
	case 'Ș':
		return 'S'
	case 'Ț':
		return 'T'
	}
	return r
}

func main() {
	s := "Învățăm în Pitești și în Brașov"
	fmt.Println(strings.Map(faraDiacritice, s))
}

Rezultat

Invatam in Pitesti si in Brasov

Greșeli frecvente

  • Returnezi 0 ca să ștergi un caracter. 0 este caracterul NUL și rămâne în text; pentru ștergere returnează -1.
  • Folosești Map pentru înlocuiri de cuvinte. Map lucrează caracter cu caracter; pentru texte folosește strings.ReplaceAll sau strings.NewReplacer.

Comenzi înrudite

  • strings.ReplaceAll: Înlocuiește toate aparițiile unui text cu altul (ReplaceAll) sau doar primele n (Replace).
  • strings.ToUpper: Returnează textul scris cu litere mari (ToUpper) sau mici (ToLower), inclusiv diacriticele.
  • unicode.ToUpper: Transformă un singur caracter în literă mare, mică sau în forma de titlu; celelalte caractere rămân neschimbate.