Manipolazione delle stringhe in Go: come aggiornare il testo

Manipolazione delle stringhe in Go: come aggiornare il testo

La manipolazione delle stringhe è fondamentale nello sviluppo del software; la maggior parte dei linguaggi di programmazione fornisce un tipo di stringa, dopotutto. Una stringa è una sequenza di caratteri: lettere, numeri e simboli.

La manipolazione delle stringhe è utile per varie applicazioni, dall’elaborazione del testo e dall’analisi dei dati allo sviluppo web. Le operazioni più comuni di manipolazione delle stringhe sono la concatenazione, la convalida dei dati, l’estrazione e la formattazione. Go fornisce un pacchetto di manipolazione delle stringhe denominato “strings” nella libreria standard.

Il pacchetto di stringhe

Il pacchetto strings fornisce varie funzioni utili per la manipolazione delle stringhe e altre operazioni. Il pacchetto include funzionalità per operazioni di sottostringa, taglio, confronto di stringhe, conversione di stringhe, creazione di stringhe, suddivisione e altro.

Puoi importare il pacchetto di stringhe specificando il nome del pacchetto nell’elenco delle importazioni.

import "strings"

Ricerca di sottostringhe

Il pacchetto strings fornisce tre funzioni per la ricerca di sottostringhe: la funzione Contains , la funzione ContainsAny e la funzione ContainsRune .

La funzione Contains controlla se la stringa specificata contiene la sottostringa. La funzione ContainsAny controlla se la stringa contiene caratteri nella sottostringa e la funzione ContainsRune controlla se la stringa contiene una runa (un carattere Unicode).

import (
    "fmt"
    "strings"
)

func main() {
    aString: = "Hello, World!"
    substring: = "World"
    characters: = "aeiou"
    aRune: = 'o'


    fmt.Println(strings.Contains(aString, substring)) // Output: true
    fmt.Println(strings.ContainsAny(aString, characters)) // Output: true
    fmt.Println(strings.ContainsRune(aString, aRune)) // Output: true
}

È possibile recuperare l’indice di una sottostringa con le funzioni Index , IndexAny , IndexByte e IndexFunc . La funzione Index restituisce l’indice di una sottostringa, se si verifica in un’altra stringa data. La funzione IndexAny restituisce l’indice della prima istanza di un punto di codice Unicode o -1 se non è presente alcun carattere.

import (
    "fmt"
    "strings"
)

func main() {
    aString: = "Hello, world!"
    substring: = "world"
    chars: = "wrld"
    byteCharacter: = byte('o')
    aRune: = rune('o')

    fmt.Println(strings.Index(aString, substring)) // Output: 7
    fmt.Println(strings.IndexAny(aString, chars)) // Output: 7
    fmt.Println(strings.IndexByte(aString, byteCharacter)) // Output: 4

    f: = func(r rune) bool {
        return r == 'o'
    }

    fmt.Println(strings.IndexFunc(aString, f)) // Output: 4
    fmt.Println(strings.IndexRune(aString, aRune)) // Output: 4
}

IndexByte restituisce l’indice della prima istanza del carattere byte nella stringa o -1 . La funzione IndexFunc restituisce l’indice nella stringa del primo punto Unicode che soddisfa una determinata funzione. Infine, la funzione IndexRune restituisce l’indice della prima istanza del punto di codice Unicode della runa.

Sostituzione delle sottostringhe in Go

Le funzioni Sostituisci e SostituisciTutto aiutano a sostituire le sottostringhe. La funzione Sostituisci accetta la stringa, la sottostringa originale, la sostituzione e diverse sostituzioni. La funzione ReplaceAll accetta solo la stringa, la sottostringa iniziale e la sostituzione.

import (
    "fmt"
    "strings"
)

func main() {
    theString: = "This is a test string to be modified."
    fmt.Println(strings.Replace(theString, "is", "was", 1))
    fmt.Println(strings.Replace(theString, "is", "was", -1))
    fmt.Println(strings.ReplaceAll(theString, "is", "was"))
}

Si noti che è possibile utilizzare sia Replace che ReplaceAll per sostituire ogni occorrenza all’interno della stringa.

risultato dell'operazione di sostituzione Go

Dividere e unire stringhe

Il pacchetto strings contiene le funzioni Split , SplitAfter , SplitAfterN e SplitN per dividere le stringhe che restituiscono una sezione delle stringhe.

Il metodo Split divide in base a un delimitatore specificato. Analogamente al metodo Split , il metodo SplitAfter suddivide la stringa, ma include il separatore nei risultati.

import (
    "fmt"
    "strings"
)

func main() {
    s: = "This is a test string to be split."


    fmt.Println(strings.Split(s, ""))
    fmt.Println(strings.SplitAfter(s, ""))
    fmt.Println(strings.SplitAfterN(s, "", 3))
    fmt.Println(strings.SplitN(s, "", 3))
}

Il metodo SplitAfterN è simile alla funzione SplitAfter , ad eccezione del fatto che la funzione suddivide la stringa in un numero massimo specificato di sottostringhe. Il metodo SplitN divide la stringa in un numero massimo specificato senza includere il separatore nelle sottostringhe.

Puoi unire stringhe con la funzione Join dal pacchetto strings . La funzione Join accetta una sezione e un delimitatore.

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println(strings.Join([]string{"Hello", "World"}, ":"))
   // Output: "Hello:World"
}

Manipolare il caso delle stringhe

La manipolazione delle maiuscole e minuscole è utile per molte attività, incluso il lavoro con la documentazione. È possibile utilizzare la funzione ToLower per le lettere minuscole, la funzione ToUpper per le lettere maiuscole e la funzione ToTitle per le maiuscole e minuscole del titolo.

import (
    "fmt"
    "strings"
)

func main() {
    s: = "This is a test string."


    fmt.Println(strings.ToLower(s)) // this is a test string.
    fmt.Println(strings.ToUpper(s)) // THIS IS A TEST STRING.
    fmt.Println(strings.ToTitle(s)) // THIS IS A TEST STRING.
}

Costruzione di stringhe in Go

I generatori di stringhe sono un tipo che consente una concatenazione efficiente in Go. Il tipo bytes.Buffer è uno dei costruttori di stringhe comunemente usati. Il metodo bytes.Buffer implementa un buffer ampliabile di byte con metodi di lettura e scrittura per le operazioni, consentendo l’aggiunta efficiente di stringhe senza la necessità di creare nuove copie, a differenza dell’operazione + e della funzione Join .

import (
    "fmt"
    "strings"
)

func main() {
    var b strings.Builder

    // Write some strings to the builder
    b.WriteString("This ")
    b.WriteString("is ")
    b.WriteString("a ")
    b.WriteString("test ")
    b.WriteString("string.")

    // Get the length of the builder
    fmt.Println(b.Len())

    // Convert the builder to a string
    str: = b.String()
    fmt.Println(str)

    // Reset the builder
    b.Reset()

    // Write some more strings to the builder
    b.WriteString("This ")
    b.WriteString("is ")
    b.WriteString("another ")
    b.WriteString("test ")
    b.WriteString("string.")

    // Get the capacity of the builder
    fmt.Println(b.Cap())

    // Convert the builder to a string again
    str = b.String()
    fmt.Println(str)
}

La funzione main dimostra come utilizzare il tipo strings.Builder per una creazione di stringhe efficiente. Il metodo WriteString del tipo Strings.Builder estende reciprocamente la sequenza di stringhe e il metodo Len restituisce la lunghezza della stringa creata.

Il metodo String converte il contenuto del generatore in una stringa e il metodo Reset reimposta il generatore per la creazione di stringhe aggiuntive.

Il metodo Cap restituisce la capacità del builder. Questo è lo spazio corrente che Go ha allocato per la stringa.

risultato dell'operazione di creazione di stringhe

Taglio di corde in Go

Il pacchetto strings fornisce anche funzionalità per tagliare le stringhe nelle funzioni Trim , TrimLeft , TrimPrefix , TrimRight , TrimSpace e TrimSuffix .

import (
    "strings"
    "fmt"
)

func main() {
    // the full string
    s: = "Hello, World!"

    // the element for the trim
    prefix: = "Hello"
    suffix: = "World!"

    // trims a string by specified trim set
    fmt.Println(strings.Trim(s, "!"))

    // trims out by spaces in the beginning and end of the string
    fmt.Println(strings.TrimSpace(s))

    // trims from the left string by specified trim set
    fmt.Println(strings.TrimLeft(s, "Hello"))

    // trims out from the right string by specified trim set
    fmt.Println(strings.TrimRight(s, "World!"))

    // trims out a prefix
    fmt.Println(strings.TrimPrefix(s, prefix))

    // trims out a specific suffix
    fmt.Println(strings.TrimSuffix(s, suffix))
}

La funzione principale mostra come utilizzare le funzioni per il taglio. Le diverse funzioni tagliano la stringa s in vari modi:

risultato dell'operazione di taglio

Puoi formattare le stringhe in Go

La libreria standard Go fornisce anche il pacchetto fmt per la formattazione delle stringhe. Il pacchetto fmt utilizza verbi di formattazione in stile C per una formattazione efficiente delle stringhe in Go.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *