Klassen String Slå ihop (konkatenera) strängar Mönster: behandla ...
Klassen String Slå ihop (konkatenera) strängar Mönster: behandla ...
Klassen String Slå ihop (konkatenera) strängar Mönster: behandla ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Klassen</strong> <strong>String</strong><br />
<strong>Klassen</strong> <strong>String</strong> beskriver en teckensträng (en följd av tecken).<br />
Tecknen kan läsas av men inte ändras.<br />
Exempel:<br />
<strong>String</strong> s = ”En massa tecken”<br />
<strong>String</strong> empty = ””;<br />
s<br />
empty<br />
En massa tecken<br />
<strong>Mönster</strong>: <strong>behandla</strong> alla tecken i strängen<br />
<strong>String</strong> s = ...;<br />
for (int i = 0; i < s.length(); i++) {<br />
// aktuellt tecken nås med<br />
// anropet s.charAt(i);<br />
}<br />
Exempel. Räkna antal blanktecken i strängen s.<br />
int spaces = 0;<br />
for (int i = 0; i < s.length(); i++) {<br />
if (s.charAt(i) == ’ ’) {<br />
spaces++;<br />
}<br />
}<br />
158<br />
160<br />
<strong>Slå</strong> <strong>ihop</strong> (<strong>konkatenera</strong>) <strong>strängar</strong><br />
<strong>String</strong> s1 = "En text";<br />
<strong>String</strong> s2 = "En text till";<br />
<strong>String</strong> result = s1 + " och " + s2;<br />
s1<br />
s2<br />
result<br />
En text<br />
En text till<br />
En text och En text till<br />
Viktiga operationer på <strong>String</strong><br />
<strong>String</strong>(); // skapar en tom sträng<br />
// (kan också skrivas "")<br />
int length(); // antalet tecken<br />
char charAt(int pos); // tecknet på plats pos<br />
boolean equals(Object s); // true om innehållet i<br />
// aktuell sträng är lika<br />
// med innehållet i s<br />
int compareTo(<strong>String</strong> s); // jämför aktuell sträng med s<br />
int indexOf(char ch); // index för den första<br />
// förekomsten av ch, -1<br />
// om ch inte finns<br />
<strong>String</strong> substring(int start, int end);<br />
// ny sträng med tecknen<br />
// med index [start, end)<br />
159<br />
161
Vad jämförs egentligen här?<br />
if (s1 == s2) {<br />
System.out.println("Samma objekt");<br />
} else {<br />
System.out.println("Inte samma objekt");<br />
}<br />
Här jämförs innehållet i referensvariablerna s1 och s2. Vi kontrollerar<br />
alltså om s1 och s2 refererar till samma objekt eller inte.<br />
s1<br />
s2<br />
abc<br />
abc<br />
Jämföra tecken<strong>strängar</strong> med compareTo<br />
/** Jämför aktuell sträng med s.<br />
Returnerar 0 om tecken<strong>strängar</strong>na är lika,<br />
ett negativt tal om aktuell sträng är mindre än s,<br />
ett positivt tal om aktuell sträng är större än s.<br />
*/<br />
int compareTo(<strong>String</strong> s);<br />
Exempel:<br />
<strong>String</strong> s1 = "java";<br />
s1.compareTo("java") == 0<br />
s1.compareTo("javac") < 0<br />
s1.compareTo("Java") > 0<br />
s1.compareTo("jazz") < 0<br />
162<br />
164<br />
Jämföra tecken<strong>strängar</strong> med equals<br />
Vill man jämföra innehållet i tecken<strong>strängar</strong>na måste man använda<br />
equals:<br />
/** Returnerar true om innehållet i aktuell sträng<br />
är lika med innehållet i s. */<br />
boolean equals(<strong>String</strong> s);<br />
Exempel:<br />
if (s1.equals(s2)) {<br />
System.out.println("Samma innehåll");<br />
} else {<br />
System.out.println("Inte samma innehåll");<br />
}<br />
<strong>Klassen</strong> <strong>String</strong>Builder<br />
<strong>Klassen</strong> <strong>String</strong>Builder beskriver en följd av tecken som kan läsas<br />
av och ändras.<br />
Exempel:<br />
<strong>String</strong>Builder b = new <strong>String</strong>Builder(”En massa tecken”);<br />
b.append(’!’);<br />
b<br />
En massa tecken!<br />
163<br />
165
Viktiga operationer på <strong>String</strong>Builder<br />
Skapa, ta reda på längd och tecken (som <strong>String</strong>):<br />
<strong>String</strong>Builder(); // tom strängbuffert<br />
<strong>String</strong>Builder(<strong>String</strong> s); // kopia av s<br />
int length(); // antalet tecken<br />
char charAt(int pos); // tecknet på plats pos<br />
Skapa <strong>String</strong>-objekt med samma innehåll:<br />
<strong>String</strong> to<strong>String</strong>(); // skapar ett <strong>String</strong>-objekt med<br />
// samma innehåll som denna<br />
// strängbuffert<br />
Vad händer här?<br />
Exempel: <strong>String</strong>Builder<br />
<strong>String</strong> s = ...;<br />
...<br />
<strong>String</strong>Builder b = new <strong>String</strong>Builder(s);<br />
int i = 0;<br />
while (i < b.length() - 1) {<br />
if (b.charAt(i) == ’.’) || b.charAt(i) == ’,’) {<br />
b.insert(i + 1, ’ ’);<br />
i++;<br />
}<br />
i++;<br />
}<br />
s = b.to<strong>String</strong>();<br />
166<br />
168<br />
Ändra innehållet i <strong>String</strong>Builder-objekt<br />
void setCharAt(int k, char ch); // ändrar tecknet på<br />
// plats k till ch<br />
<strong>String</strong>Builder append(<strong>String</strong> s); // lägger till s<br />
// efter tecknen<br />
<strong>String</strong>Builder insert(int k, <strong>String</strong> s);<br />
// lägger in s på plats k,<br />
// flyttar tecknen efter<br />
<strong>String</strong>Builder deleteCharAt(int k);<br />
// tar bort tecknet<br />
// på plats k<br />
…<br />
Parametern s i metoden append och insert kan vara av annan typ<br />
än <strong>String</strong>, t ex int, double, char, ....!<br />
!<br />
167