06.08.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!