Modellierung und Programmierung 1 Prof. Dr. Sonja Prohaska Computational EvoDevo Group Institut f¨ ur Informatik Universit¨ at Leipzig
6. Januar 2016
Strings – Besonderheiten I I
Strings sind Objekte
I
eine Stringreferenz zeigt auf den Wert, das Stringobjekt
I
das Stringobjekt ist unver¨ anderbar (engl. immutable)
I
mehrere Referenzen k¨ onnen auf ein Stringobjekt zeigen
I
einer Stringreferenzen kann ohne Anwendung des new-Operator ein neues Stringobjekt zugewiesen werden String laufvogel = "Moa"; laufvogel = "Emu";
I
Stringobjekte k¨onnen ohne Anwendung des new-Operator kopiert werden String laufvogel = "Emu"; laufvogel = "Moa"; String newZBewohner = laufvogel;
Strings – Besonderheiten II I
undefinierte Stringreferenz: String flugsaurier; → null
I
leeres Stringobjekt: String adler = "";
I
Literal: String papagei = "Kakadu";
I
Variable: String vogel = papagei;
I
new-Operator: String seglervogel = new String("Kolibri"); char[] laufvogel = {’K’, ’i’, ’w’, ’i’}; String newZBewohner = new String(laufvogel);
unver¨anderbare (immutable) Strings
Methoden der String-Klasse ver¨andern niemals den originalen String, sie geben einen neuen String (und damit auch eine neue Referenz) zur¨ uck. Was bedeutet das? I
auf welches Stringobjekt eine Referenz zeigt ist ver¨anderbar
I
das Stringobjekt, auf das eine Referenz zeigt, ist nicht ver¨andert werden
¨ Ubung: MickyMouse.java
Methoden der Klasse String – equals() Strings vergleichen I
I I
Vergleich der Referenzen String string1 = "cat"; String string2 = "cat"; (string1 == string2) → false String string1 = "cat"; String string2 = string1; (string1 == string2) → true This is what you really want! Vergleich der Strings String string1 = "cat"; String string2 = string1; string1.equals(string2); → true
java.lang.String – Methode: equals() boolean
equals ( Object anObject ) Compares this string to the specified object
boolean var = this string . equals ( specified object ); boolean var =
string1 . equals ( string2 );
Methoden der Klasse String t h e
b l a c k
c a t
i s
a t
h o m e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
String satz = "the black cat is at home"; startsWith()
I I
satz.startsWith("the") → true satz.startsWith("The") → false (uppercase ’T’ !)
endsWith()
I I
satz.endsWith("me") → true satz.endsWith("home ") → false (tailing space!)
Methoden der Klasse String – compareTo() lexikographischer Vergleich von Strings
I
I
compareTo() vergleicht thisString mit anotherString lexikographisch R¨ uckgabetyp: int (Integer) I I I
thisString gleich anotherString → 0 thisString gr¨oßer anotherString → positiv Integer thisString kleiner anotherString → negativ Integer −32
0
Ant 33
ant 1
bee
Methoden der Klasse String t h e
b l a c k
c a t
i s
a t
h o m e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
Finden von Subsequenzen I
I
I
I
length() – returns int gibt die L¨ange von thisString zur¨ uck indexOf(char|String x, int i) – returns int returns the index within thisString of the first occurrence of the specified character or substring x, starting forward search at index i lastIndexOf(char|String x, int i) – returns int returns the index within thisString of the last occurrence of the specified character or substring x, starting backward search at index i return value ’-1’ indicates that there is no occurence of x in the specified substring of thisString
Methoden der Klasse String Durchsuchen des Strings satz nach allen, nicht u ¨berlappenden, Kopien des Substrings “at”. 2
length of the search string
t h e
b l a c k
c a t
i s
a t
h o m e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 forward search 0
11 + 2 13
17 + 2 19
backward search − 2 +17 − 2 +11 −1
9
¨ Ubung: UntanglingStrings.java
15
−1 23
Methoden der Klasse String t h e
b l a c k
c a t
i s
a t
h o m e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
“Zerkleinern” von Strings I
substring() – returns String substring(beginIndex, endIndex) returns a new string that is a substring of thisString beginIndex: index of first character to be returned endIndex: index one beyond last character to be returned warum “one beyond last”? aus Bequemlichkeit: beginIndex + L¨ange des gesuchten Substrings Beispiel: String cat = satz.substring(10,13);
Methoden der Klasse String t h e
b l a c k
c a t
i s
a t
h o m e
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
“Zerkleinern” von Strings I
toCharArray() – returns char[] converts thisString to a new character array Beispiel:char[] satzInChar = satz.toCharArray();
I
split() (Tokenizer) – returns String[] hier eine spezialisierte Form der Anwendung: String[] words = split(" ",0); wobei " " – ’blank’ Symbol wobei 0 – Limit f¨ ur die Anzahl an Tokens
Methoden der Klasse String I
String als R¨ uckgabetyp I I I I
I
boolean als R¨ uckgabetyp I I I
I
equals() startsWith() endsWith()
int als R¨ uckgabetyp I I I I
I
substring() replace() split() trim()
compareTo() length() indexOf() lastIndexOf()
char als R¨ uckgabetyp I I
charAt() toCharArray()
Methoden der Klasse Character
eine winzige Auswahl: I
boolean als R¨ uckgabetyp I I I
I
isWhitespace() isLetter() isDigit()
char als R¨ uckgabetyp I
parseChar()
¨ Ubung: UntangingStrings.java
Ver¨anderbare (mutable) Strings
Was es denn nicht alles gibt! Zwei M¨oglichkeiten: I
StringBuilder I I
I
nicht thread safe, nicht f¨ ur Multithreading geeignet besseres Laufzeitverhalten als StringBuffer
StringBuffer I I
thread safe, f¨ ur Multithreading geeignet schlechteres Laufzeitverhalten als StringBuilder
StringBuilder und StringBuffer stellen die selben Methoden zur Verf¨ ugung.
Zwei wichtige Konzepte der Programmierung Thread (w¨ortlich: Faden, Strang): ein Ausf¨ uhrungsstrang ist eine Sequenz von Anweisungen in einem Program, die unabh¨angig von anderen Programmteilen ausgef¨ uhrt werden kann. Multithreading in Systemen mit mehreren Prozessoren erm¨oglicht, dass mehrere Threads parallel laufen k¨onnen → Paralellverarbeitung. Buffer (Puffer) sind Speicher f¨ ur die Zwischenlagerung von Daten. Puffer dienen dem Ausgleich von Unterschieden in der Verarbeitungsgeschwindigkeit der Daten von aufeinanderfolgenden Prozessen. Beispiel: Youtube: Laden eines Videos – Puffer – Abspielen des Videos
Klasse StringBuilder I
StringBuilder Objekte verhalten sich wie Objekte
I
Deklaration und Definition: StringBuilder builtString = new StringBuilder();
I
Initialisierung: StringBuilder(String str)
I
ein Objekt belegt (alloziert) einen Bereich im Speicher, den Puffer
I
Kapazit¨ at (capacity): Gr¨ oße dieses Bereichs
I
default: Kapazit¨at = L¨ange des Strings plus 16
I
w¨ achst dynamisch wenn erforderlich
I
L¨ange des Strings L¨ange de Strings
Command Line Parameter/Arguments Elektronische Daten Verarbeitung (EDV) funktioniert nach dem EVA-Prinzip: Eingabe (input), Verarbeitung (processing) und Ausgabe (output) I
Daten sind das “Was” der Datenverarbeitung und stellen die Angaben, (Zahlen-)werte u.a. die durch Messung, Beobachtung u.a. gewonnen wurden dar
I
sie werden u uhrt gestellt ¨blicherweise dem Programm zur verf¨ z.B. per Konsoleneingabe (Tastatur), Datenstr¨ ome (von Programm zu Programm) oder Datendateien (Festplatte)
I
Parameter sind programminterne “Weichen”
I
Argumente sind programmexterne “Weichensteller”, die das “Wie” der Verarbeitung der Daten durch das Programm steuern Parameter k¨ onnen voreingestellt sein, bzw. k¨ onnen oder m¨ ussen beim Programmaufruf spezifiziert werden z.B. per Kommandozeilenargumente oder Konfigurationsdateien
Hinweis: in der Informatik werden die Begriffe “Daten” und “Information” oft gleichbedeutend verwendet
Kommandozeilenargumente (command line arguments) ¨ Ubergabe von Argumenten an ein Programm I
sowohl Daten (“Was”), z.B. in Form von Dateien, als auch Parameter (“Wie”) der Datenverarbeitung k¨ onne mittels Kommandozeilenargumenten zur Verf¨ ugung gestellt werden
Konsolenaufrufe
Programmausgaben
Beispiel: AutoGreetings.java
Kommandozeilenargumente Die Kommandozeile: I
Beim Programmaufruf k¨ onnen Argumente spezifiziert werden
I
Programmaufruf Argument 1 Argument 2 ... Argument n
I
jedes Argument hat eine Bedeutung z.B. Startwert f¨ ur Berechnung, Name der Datendatei, Symbol zur Steuerung eines bestimmten Programmablaufs
Im Programm: I
Argumente als Strings in Array args
I
das Programm muss diesen Strings wieder eine Bedeutung geben
I
Parsen der Kommandozeilenargumente
Author: Monika Meiler
Konvertieren von Strings zu Prim¨aren Datentypen Wrapper-Klassen I
prim¨are Datentypen sind keine Objekte
I
trotzdem wie Objekte behandeln
I
“einh¨ ullen” (to wrap) in ein Objekt
I
durch Wrapper-Klassen
I
sie stellen u.a. Stringparser zur Verf¨ ugung
I
z.B. int schnapsZahl = Integer.parseInt("66");
Fehler (Error) vom Typ NumberFormatException
Dateinamen zum Leben erwecken – File-Klasse Dateien lesen