190 likes | 301 Views
Föreläsning 10. Stränghantering. java.lang. String. String. En sträng har:. value : char[] - count : int. Ett värde och en längd. + length(): int + charAt(int): char + indexOf(char): int …. Ett antal metoder. En sträng består av ett antal tecken
E N D
Föreläsning 10 Stränghantering
java.lang.String String En sträng har: • value : char[]- count : int Ett värde och en längd + length(): int+ charAt(int): char+ indexOf(char): int … Ett antal metoder • En sträng består av ett antal tecken • Strängar i Java hanteras som objekt av klassen String • En sträng kan inte modifieras efter att den har skapats!
java.lang.String • Krävs ingen hantering av en strängs storlek eller avslutande null-tecken • Liknar till en viss del primitiva typer • Kan vara en konstant • Kan tilldelas en strängkonstant "Programmering i Java" // en strängkonstantString s = "Programmering i Java"; • En strängvariabel är en referens till ett sträng-objekt
Skapa Strängar s1 s2 s1 : String s2 : String value = ""count = 0 value = "Java"count = 4 + length(): int+ charAt(int): char+ indexOf(char): int … + length(): int+ charAt(int): char+ indexOf(char): int … • Några användbara konstruktorer: public String()public String(Stringen_annan_sträng)public String(StringBufferen_stringbuffer) String s1 = new String();String s2 = new String("Java");
Strängkonstanter "strängar" : String "strängar" value = "strängar"count = 8 + length(): int+ charAt(int): char+ indexOf(char): int … • "tecken omslutna av dubbel-fnuttar" • En konstant, t.ex "strängar" ses som en referens till ett String-objekt. • Alla förekomster av "strängar" i pro-grammet refererar till samma objekt
Addera Strängar ("5 + 5 = " + "5" + "5") ("5 + 5 = " + "10") • Ytterligare ett sätt att skapa strängar är att addera två andra • + operatorn används för detta String efterNamn = "Karlsson";String namn = "Kalle " + efternamn;System.out.println(namn); // Kalle Karlsson • Primitiva typer konverteras om automatiskt vid strängaddition System.out.println("5 + 5 = " + 5 + 5); // 5 + 5 = 55System.out.println("5 + 5 = " + (5 + 5)); // 5 + 5 = 10
Metoden length() 0 1 2 3 4 5 6 7 8 9 index J a v a k u r s e n tecken • Antalet tecken i en sträng är lika med strängens längd String s1 = ""; // s1.length() 0 String s2 = "Java"; // s2.length() 4 String s3 = "kursen"; // s3.length() 6String s4 = s2 + s3; // s4.length() 10 • Positionen av ett visst tecken i strängen kallas för dess index • Första tecknet har index 0
Metoden charAt() 0 1 2 3 4 5 6 7 8 9 J a v a k u r s e n s1.charAt(0); s1.charAt(4); s1.charAt(s1.length() - 1); • charAt() används för att komma åt ett tecken på ett visst index public char charAt(int index) • Exempel: String s1 = "Javakursen";char ch = s1.charAt(4);System.out.println(ch); // Skriver ut k
Metoden substring() 0 1 2 3 4 5 6 7 8 9 J a v a k u r s e n s1.substring(4, 7) • substring() används om man vill komma åt fler än ett tecken public String substring(int startindex)public String substring(int startindex, int slutindex) • Exempel: String s1 = "Javakursen";String s2 = s1.substring(7); // sen String s3 = s1.substring(4, 7); // kur
Metoden indexOf() String s1 = ""; s1.indexOf('a') == -1 String s2 = "Java"; s2.indexOf('a') == 1 String s3 = "kursen"; s3.indexOf("va") == 1 String s4 = s2 + s3; s4.indexOf("va") == 2 s4.indexOf('a', 2) == 3 0 1 2 3 4 5 6 7 8 9 J a v a k u r s e n • Söker från vänster till höger efter ett tecken eller substring • Returnerar tecknets index eller –1 public int indexOf(char tecken)public int indexOf(char tecken, int startindex)public int indexOf(String string)public int indexOf(String string, int startindex)
Metoden lastIndexOf() String s1 = ""; s1.lastIndexOf('a') == -1 String s2 = "Java"; s2.lastIndexOf("va") == 2 String s3 = " java!"; s3.lastIndexOf('a') == 4 String s4 = s2 + s3; s4.lastIndexOf("va") == 7 s4.lastIndexOf("va", 5) == 2 0 1 2 3 4 5 6 7 8 9 J a v a j a v a ! • lastIndexOf söker från höger till vänster efter tecken eller substring • Returnerar tecknets index eller –1 public int lastIndexOf(char tecken)public int lastIndexOf(char tecken, int startindex)public int lastIndexOf(String string)public int lastIndexOf(String string, int startindex)
Jämföra strängar • Tre metoder för att jämföra strängar public boolean equals(Object anObject) // Överlagringpublic boolean equalsIgnoreCase(String anotherString)publicint compareTo(String anotherString) • Två strängar är lika om de inne-håller samma tecken i rätt ordning String s1 = "Java";String s2 = "java"; s1.equals(s2); // false s1.equalsIgnoreCase(s2); // trues1 == s2; // false (fel sätt)s1.compareTo("C++"); // returnerar 1s1.compareTo("Pascal"); // returnerar -1 • == kollar om det är samma referens
Fler Metoder • Klassen String innehåller även dessa metoder (används inte lika ofta) boolean endsWith(String suffix)boolean startsWith(String prefix)String toUpperCase()String toLowerCase()String trim()String replace(char oldChar, char newChar) String s1 = "Javakursen";boolean end = s1.endsWith("sen"); // trueboolean start = s1.startsWith("Java"); // trues1 = s1.toUpperCase(); // "JAVAKURSEN"s1 = s1.toLowerCase(); // "javakursen"s1 = " Javakursen ".trim(); // "Javakursen" s1.replace('a', 'o'); // "Jovokursen"
Effektivitet • Strängar i Java kan inte modifieras • När ett värde tilldelas en sträng skapas ett nytt objekt -tidskrävande String resultat = "";for (int i = 0; i < 10; i++) resultat = resultat + i; • Med System.currentTimeMillis() kan vi mäta tiden för en operation long start = System.currentTimeMillis();// operation som ska mätaslong end = System.currentTimeMillis();long tid = end – start; // antal ms det tog
java.lang.StringBuffer • Är strängar som kan modifieras • Några konstruktorer: public StringBuffer()public StringBuffer(Stringen_existerande_sträng) • Några metoder: public StringBuffer append(Type t) // lägger till sistpublic StringBuffer insert(int offset, Type t) // sätter in vid offsetpublic StringBuffer delete(int start, int end) // tar bort tecknen mellanpublic StringBuffer reverse() // vänder - java avajpublic String toString() // StringBuffer som String public char charAt(int index) // returnerar tecknet vid indexpublicint indexOf(String str) // index där str finns (vänsterhöger)publicint lastIndexOf(String str) // index där str finns (högervänster) publicint length() // antal tecken i aktuell StringBufferpublic String substring(int start) // en substräng från start till slutet
java.util.StringTokenizer • Används för att dela upp en sträng i delar (tokens), t.ex ta fram orden ur en mening • Normalt delas strängen vid mellan-slag, tabb och radbyte • Man kan också ange vilka tecken strängen ska delas vid.
StringTokenizer (forts) • str är strängen som ska delas upp • Delim anger vilka tecken str ska delas vid • Returnerar true om det finns några tokens kvar att plocka fram ur strängen • Returnerar nästa token • Räknar ut hur många tokens det finns kvar i strängen // Några konstruktorerpublic StringTokenizer(String str) // 1public StringTokenizer(String str, String delim) // 2// Några metoderpublicboolean hasMoreTokens() // 3publicString nextToken() // 4publicint countTokens() // 5
StringTokenizer (forts) Dettaärenmeningslösmening. httpwww.itm.mh.se~roberiindex.html Tokens Tokens • Default-avgränsare är whitespace String s = "Detta är en meningslös mening.";StringTokenizer st = new StringTokenizer(s); String s = "http://www.itm.mh.se/~roberi/index.html";StringTokenizer st = new StringTokenizer(s, ":/"); • Kan ange egna avgränsare
StringTokenizer (forts) • Exempel import java.util.StringTokenizer;publicclass RaknaOrd {publicstaticvoidmain(String[] args) { String mening = "Detta är en meningslös mening"; StringTokenizer st = new StringTokenizer(mening);int antalOrd = st.countTokens(); System.out.println("Antal ord: " + antalOrd); // Skriver ut ordenwhile (st.hasMoreTokens()) { System.out.println(st.nextToken()); } }}