← Go/De eerste bouwstenen
Les 7 van 8
MODULE 01 · 07◷ 23 min

Ruim tekst op zonder de oorspronkelijke naam te verliezen

Na deze les kun je
  • Functies uit het standaardpakket strings gebruiken.
  • Buitenste witruimte, hoofdletters en een tekstprefix bewust behandelen.

Een aanmeldformulier levert een naam met spaties aan de randen op. Voor het tonen van die naam wil je de buitenkant opruimen, maar de spatie tussen voor- en achternaam moet blijven bestaan. Voor een eenvoudige zoekvraag wil je daarnaast een versie in kleine letters gebruiken.

Een pakket met tekstgereedschap

Go heeft een standaardbibliotheek met pakketten voor veelvoorkomende taken. Je gebruikt fmt al om uitvoer te maken. Het pakket strings bevat functies die met tekstwaarden werken.

Zet beide pakketnamen bovenaan je programma in een importgroep. Tussen import en de afsluitende haakjes staat iedere pakketnaam op een eigen regel, tussen aanhalingstekens. De voorbeelden hieronder laten die schrijfwijze volledig zien.

Met strings.TrimSpace(name) kies je de functie TrimSpace uit dat pakket en geef je name als argument mee. De hoofdletters in de functienaam horen erbij. Go maakt onderscheid tussen TrimSpace en trimspace.

Alleen de buitenkant opruimen

Een naam opruimen en bewaren
package main

import (
	"fmt"
	"strings"
)

func main() {
	name := "  Noor Bakker  "
	cleanName := strings.TrimSpace(name)
	fmt.Printf("[%s]\n", name)
	fmt.Printf("[%s]\n", cleanName)
	fmt.Println(strings.ToLower(cleanName))
}
Verwachte uitvoer
[  Noor Bakker  ]
[Noor Bakker]
noor bakker

Het voorbeeld maakt eerst een nieuwe tekstwaarde zonder de buitenste witruimte. De spatie tussen Noor en Bakker blijft staan. De blokhaken in de uitvoer laten zien waar de oorspronkelijke en opgeruimde tekst beginnen en eindigen.

Witruimte omvat hier meer dan gewone spaties: ook bijvoorbeeld een tab of nieuwe regel kan aan de buitenkant staan. TrimSpace ruimt die buitenste witruimte op. Het verwijdert geen gewone spatie midden in een naam.

Strings zijn in Go onveranderlijk als tekstwaarde. Deze functie geeft een resultaat terug; zij past de oorspronkelijke string niet ter plaatse aan. Bewaar het resultaat dus in een nieuwe variabele, zoals cleanName, of wijs het bewust opnieuw toe als je de oorspronkelijke waarde niet nodig hebt.

Een versie voor een eenvoudige zoekvraag

Met strings.ToLower(cleanName) maak je een tekstwaarde in kleine letters. Daarmee kunnen de voorbeelden Rosa en rosa dezelfde eenvoudige zoekvorm krijgen. De oorspronkelijke schrijfwijze blijft beschikbaar voor een bericht aan de deelnemer.

Deze omzetting is geen complete regel voor elke taal of iedere zoekmachine. Later leer je meer over Unicode en tekstvergelijking. In deze oefening gebruiken we gewone Latijnse letters, zodat het effect van opruimen en hoofdletters duidelijk blijft.

Begint de tekst met dit stukje?

Een prefix is het eerste deel van een tekst. strings.HasPrefix(searchName, "rosa") geeft een bool terug die vertelt of searchName met die tekst begint. Daarmee verbind je tekstbewerking aan de true- en false-waarden uit de vorige les.

De controle zelf is hoofdlettergevoelig. "Rosa" begint met een hoofdletter en heeft dus niet exact de prefix "rosa". Als je de vraag in kleine letters wilt stellen, maak je eerst de kleineletterversie en controleer je daarna die versie.

Veelgemaakte fout: elke spatie verwijderen

Een interne spatie heeft betekenis
package main

import (
	"fmt"
	"strings"
)

func main() {
	place := "  Den Haag  "
	fmt.Println(strings.ReplaceAll(place, " ", ""))
	fmt.Println(strings.TrimSpace(place))
}
Verwachte uitvoer
DenHaag
Den Haag

De foutvariant gebruikt ReplaceAll om alle gewone spaties door lege tekst te vervangen. Ook de ruimte tussen Den en Haag verdwijnt, zodat een andere plaatsnaamvorm ontstaat. De juiste bewerking hangt dus af van welke tekens je werkelijk wilt verwijderen.

ReplaceAll krijgt in dit voorbeeld drie argumenten: de oorspronkelijke tekst, de gezochte spatie en de lege vervanging. Je hoeft die functie niet in de opdracht te gebruiken. Het voorbeeld maakt zichtbaar waarom TrimSpace bij buitenste witruimte beter aansluit op onze afspraak.

Toon beide vormen

In de oefening staat de naam Rosa de Wit met twee spaties aan iedere rand klaar. Maak een opgeruimde en een kleineletterversie, controleer de prefix rosa en toon daarna de oorspronkelijke naam tussen blokhaken. Zo kun je zien dat de bewerkingen de bron niet hebben gewijzigd.

AAN DE SLAG 0/4
1

Een leesbare naam

Toon op de eerste regel de met TrimSpace opgeruimde rawName. De spaties tussen de naamdelen moeten blijven staan.

2

Een zoekvorm

Toon op de tweede regel de opgeruimde naam in kleine letters.

3

De gewenste prefix

Toon op de derde regel of de kleineletterversie begint met rosa.

4

De bron bewaren

Toon op de vierde regel rawName tussen blokhaken, met de oorspronkelijke twee spaties aan iedere rand.

Samenvatting

  • strings levert gewone functies uit de standaardbibliotheek.
  • TrimSpace ruimt de buitenkant op; interne spaties blijven staan.
  • ToLower en HasPrefix geven nieuwe waarden zonder de bron te wijzigen.

De volgende les combineert rekenen, tekst en een vergelijking in één voorraadbericht.

main.go
UitvoerConsole
›
›_

Hier komt je resultaat.

Voer je code uit en ontdek
wat je hebt gemaakt.

0/4 stappen
EVEN MEEKIJKEN

Bekijk hoe het kan.

Je mag de oplossing bekijken. Deze poging telt dan niet mee als afgeronde les. Met Reset kun je daarna opnieuw zelf oefenen.