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
String
som är en klass och inte en primitiv typ. -
En
String
innehå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 returnerartrue
om strängarnas1
ochs2
ä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ärpnr
innehåller ett personnummer (sträng med 10 siffror). Metoden skall returneratrue
om 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
char
och 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
?