Strängar
Kom ihåg: Typenchar ä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:
-
En sträng är en följd av 0 eller flera tecken dvs värden
datatypen
char - Strängar ("strängkonstanter") omges av citationstecken (Exempel: "Ciao!")
-
Datatypen för att hantera strängar heter
Stringsom är en klass och inte en primitiv typ. -
En
Stringinnehåller inte själva strängen utan endast en referens (adress, pekare) till ett String-objekt där texten finns lagrad -
Ett
String-objekt kan inte ändras men enString-variabel kan sättas att referera ett annatString-objekt. -
Operatorn
+används för att sätta ihop (konkatenera) 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
-
Skriv en metod
public static boolean isEqual(String s1, String s2)som returnerartrueom strängarnas1ochs2är lika oavsett om det är små eller stora bokstäver i dem. Således skall "Tom" och "tom" betraktas som lika. -
Skriv metoden
public static boolean isFemale(String pnr)därpnrinnehåller ett personnummer (sträng med 10 siffror). Metoden skall returneratrueom den nionde siffran är jämn, annarsfalse. -
Skriv en metod
public static String shortest(String[] a)som returnerar den kortaste av de strängar som finns i arrayena.
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" |
Ö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
-
typen
charoch typenString- skillnader? -
typen
String- vilka operationer finns det? - Hur jämför man strängar?
-
En fråga som inte har med tecken och strängar att göra: varför står det
att metoderna som skall skrivas i denna lektion är
static?