9 Stränghantering

Hittills har vi använt strängar vid inläsning och utskrift samt nu senast i array-delen visat på hur de egentligen består av en array med tecken.

I några av uppgifterna till array-delen fick du prova på att redigera befintliga strängar, t.ex. byta ut versaler mot gemener eller ersätta mellanslag med bindestreck. Detta är ett fullt fungerande sätt att jobba med strängar men är något omständigt. Eftersom att jobba med text på det sättet är ett vanligt förekommande problem inom programmering har de flesta programspråk inbyggda funktioner för att hantera strängar på olika vis. Så även C#.

9.1 Strängmetoder

Vi kommer här att titta på några av de vanligaste metoderna för att jobba med strängar på olika sätt. Beskrivningarna i tabellen nedan utgår från att vi har följande kod:

string text = "En apa och en katt, vilken underbar skatt! ";
text.

Precis efter punkten på andra raden fyller vi på med respektive metod. Man använder alltså metoderna med variabelnamn.Metodnamn.

Metod Beskrivning
Contains(värde) Undersöker om värde finns någonstans i strängen. Returnerar bool.
EndsWith(värde) Undersöker om värde finns i slutet av strängen. Returnerar bool.
IndexOf(värde) Returnerar ett heltal för det index där värde finns i strängen. Om det inte finns returneras -1. värde kan vara både en sträng eller en char.
Insert(start, värde) Returnerar en ny sträng där värde är inskjutit på plats start.
Remove(start) Returnerar en ny sträng där alla bokstäver från värdet start till slutet av nuvarande sträng har plockats bort.
Replace(gammal, ny) Returnerar en ny sträng där värdet i gammal har ersatts med värdet i ny. gammal och ny kan vara både sträng och char.
Split(värde) Delar upp strängen i olika delar vid varje förekomst av värde. Returnerar en string-array.
Substring(start, längd) Plockar ut en del av en sträng och returnerar som en ny sträng. Börjar vid index start och går längd steg framåt.
StartsWith(värde) Undersöker om värde finns i början av strängen. Returnerar bool.
ToLower() Returnerar en kopia av strängen med samtliga bokstäver som gemener.
ToUpper() Returnerar en kopia av strängen med samtliga bokstäver som versaler.
Trim() Returnerar en ny sträng där alla inledande och avslutande white-space-tecken (mellanslag, tabb) plockats bort.

9.2 Formatera strängar

Vi har tidigare lärt oss specialtecknen \n och \t för att göra radbrytningar respektive tabb. Vi har även tittat snabbt på ett alternativt sätt att skriva ut värdet av en variabel mitt i en sträng. Vi använde då platshållare. Det kan se ut såhär, t.ex:

int alder = 31;
string namn = "Martin";
Console.WriteLine("Mitt namn är {0} och jag är {1} år gammal.", namn, alder);

Det är också fullt möjligt att använda samma platshållare flera gånger:

string bla = "Blå";
Console.WriteLine("Röd, Grön, {0}, Röd, Grön, {0}", bla);

Vi kan utöka användningen av dessa platshållare för att t.ex. formatera decimaltal. I kombination med tabbar kan vi skapa en lite snyggare tabell.

Console.WriteLine("Decimaler:\t1\t2\t3\t4");
Console.WriteLine("\t\t{0:0.0}\t{0:0.00}\t{0:0.000}\t{0:0.0000}", Math.E);
Console.WriteLine("{0:000}\t{1:000}\t{2:000}\t{3:000}", 5, 13, 999, -1);

Antalet nollor efter kolon (:) men före punkt (.) anger hur många siffror heltal ska skrivas ut med. Nollorna efter punkten anger antalet decimaler.

9.3 Övningar

Genomför nedanstående övningar i Visual Studio.

  1. Skriv ett program som låter dig mata in ditt namn och svarar med dina initialer. Så “Erik Dahlberg” blir “ED”.

  2. Genomför övning 10 igen men använd nu istället sträng-metoderna ovan.

  3. Låt användaren mata in en text och låt programmet avgöra om texten går att använda som lösenord om följande krav ska uppfyllas:

    • Får ej innehålla mellanslag
    • Måste innehålla minst en stor bokstav
    • Måste innehålla minst en liten bokstav
    • Måste bestå av minst 8 tecken.
  4. Skriv ett program som undersöker om en inmatad sträng är en godkänd mailadress.

    • Finns @ med
    • Finns något före @
    • Finns något efter @
    • Har delen efter @ något på formen domän.förkortning, t.ex. hotmail.com eller jonkoping.se.
  5. Skriv ett program som undersöker om den text användaren matar in är ett palindrom. Bortse från mellanslag!

  6. Skriv ett program som räknar antal ord i en sträng som användaren får mata in.

  7. Bekanta dig med metodhjälpen som ges av Visual Studio. Skapa en sträng string namn = "Jerry Seinfeld". Skriv sedan på nästa rad namn. och se den lista av funktioner som dyker upp. Många av dem bör du känna igen från tabellen ovan i detta häfte. Skriv ut en av funktioner, t.ex. Substring följt av tomma paranteser (). Du bör då få upp nästa “hjälpruta” med information om vad som ska stå i parantesen. Du kan även bläddra uppåt/nedåt med piltangenterna för att se olika varianter av samma funktioner, dvs. samma funktionsnamn men olika så kallade parametrar (mer om detta längre fram i häftet). Lägg detta på minnen och använd framöver vid behov.

  8. Skriv ett program som räknar antalet gånger en delsträng finns inuti en sträng. (T.ex: I strängen “Martin Larsson” finns delsträngen “ar” två gånger.)

  9. Skriv ett program som läser in en rad på formen förnamn efternamn, ålder, stad, yrke och sedan skriver ut information på formen

efternamn, förnamn
---
Ålder: ålder
Stad: stad
Yrke: yrke