Strängar

Kom ihåg: Typen char är en primitiv datatyp som används för att representera enskilda tecken. Teckenkonstanter omges av apostrofer (ex: 'a', '1', '*' ...).

Lite repetition från den introducerande lektionen om tecken och strängar:

Exempel:

String name = "Kalle"; String familyName = "Andersson"; int age = 14; String fullName = name + " " + familyName; String s = fullName + " är " + age + "år"

Klassen String innehåller en stor mängd metoder (funktioner, operationer) för att göra saker med strängar.

Antag att vi har satt:

String s = "To be or not to be";

Här är följer några exempel vad olika metoder returnerar på den strängen:

s.length() Returnerar 18 (antalet tecken i strängen)
s.charAt(3) Returnerar 'b' (första tecknet har nummer 0)
s.toUpperCase() Returnerar "TO BE OR NOT TO BE"
s.substring(3,7) Returnerar "be o" (position 7 kommer INTE med)

Se vidare javadokumentationen för klassen String.

Övningar

  1. Skriv en metod public static boolean isEqual(String s1, String s2) som returnerar true om strängarna s1 och s2 är lika oavsett om det är små eller stora bokstäver i dem. Således skall "Tom" och "tom" betraktas som lika.
  2. Skriv metoden public static boolean isFemale(String pnr) där pnr innehåller ett personnummer (sträng med 10 siffror). Metoden skall returnera true om den nionde siffran är jämn, annars false.
  3. Skriv en metod public static String shortest(String[] a) som returnerar den kortaste av de strängar som finns i arrayen a.

Jämförelser av strängar

Prova dessa rader i interaktionsrutan: String s = "hej"; String t = "hej"; s == "hej" s == t s = t; s == t

Förklaringen till de, möjligen oväntade, resultaten är att jämförelsen s == t jämför referenserna dvs om s och t refererar samma objekt, inte om objekten innehåller samma sträng.

För att jämföra textsträngarna använder man metoden equals:

s.equals("hej") i stället för s == "hej"
s.equals(t) i stället för s == t
Varning
Att jämföra strängar med == och != är ett vanligt nybörjarfel som kan vara svårt att upptäcka! Det är extra lurigt eftersom det kan råka fungera i vissa fall.

För att jämföra strängar i "asciiteckenordning" vilket blir bokstavsordning kan man använda compareTo() som returnerar ett heltal enligt följande exempel:

s.compareTo("hej") 0 eftersom strängarna är lika
s.compareTo("haj") positivt värde eftersom "hej" kommer efter "haj"
s.compareTo("hejsan") negativt värde eftersom "hej" kommer före "hejsan"
Kom ihåg att de svenska bokstäverna å, ä och ö inte kommer i rätt ordning!

Övning

Skriv en metod public static String smallest(String[] a) som returnerar den minsta (definierat av compareTo) av de strängar som finns i arrayen a

Sammanfattande frågor


Tillbaka

Valid CSS!