Übung Softwareentwicklung 1 für Wirtschaftsinformatik Strings

Werbung
Übung Softwareentwicklung 1
für Wirtschaftsinformatik
Strings
Dipl.-Ing. Kerstin Altmanninger
Wintersemester 2008/2009
Mittwoch, 10.12.2008
Überblick
•
•
•
•
•
Stringkonstanten
Datentyp String
Stringvergleiche
Stringoperationen
Aufbau von Strings
– Erzeugung von Strings aus einer Stringkonstanten
– Erzeugung von Strings aus einem char-Array
– Erzeugung von Strings aus einem StringBuffer
•
•
Stringkonversionen
Beispiele
2/18
SWE1 Übung
DI Kerstin Altmanninger
Stringkonstanten
•
Zeichenfolgen zwischen doppelten Hochkommas
•
Dürfen nicht über Zeilengrenzen gehen
•
Falls Zeichen enthalten sein sollen, die am Bildschirm nicht darstellbar sind
→ mit Escape-Sequenzen ausdrücken
– Beginnen alle mit dem Escape Zeichen \
– Dürfen in Zeichen- und Zeichenkettenkonstanten vorkommen
neue Zeile (LF)
– Beispiele: '\n'
'\r'
'\t'
'\\'
'\''
•
return (CR)
Tabulatorsprung
Backslash
einfaches Anfuehrungszeichen
Beispiele für Stringkonstanten:
System.out.println("s string of many words");
System.out.println("Alice\t2000\nBob\t1980");
System.out.println("containing a \" character");
System.out.println("EURO symbol: \u20ac");
Output
3/18
SWE1 Übung
DI Kerstin Altmanninger
Datentyp String (1/2)
•
Stringvariablen enhalten Zeiger auf Stringobjekte, nicht Stringobjekte selbst
•
Beispiel:
String a, b; //Deklaration
a = "Hello";
b = a;
a
Hello
b
•
Stringobjekte sind NICHT veränderbar!
•
Beispiel:
a = a+" World"; //neues Stringobjekt wird erzeugt!
a
Hello World
b
Hello
4/18
SWE1 Übung
DI Kerstin Altmanninger
Datentyp String (2/2)
•
String hat besondere Unterstützung durch den Compiler
– Compiler kennt den Typ String, obwohl dieser eigentlich nicht in der
Sprache, sondern in der Bibliothek definiert wurde
– Compiler unterstützt den Verkettungsoperator +
(falls einer der Operanden nicht vom Typ String ist, wird dieser Operand
voher automatisch in eine Stringdarstellung umgewandelt)
– Beispiel:
boolean b = true;
String s = "word"+47+"="+b;
s
word47 = true
5/18
SWE1 Übung
DI Kerstin Altmanninger
Stringvergleiche
•
•
Zeigervergleich:
Wertevergleich:
•
Beispiel 1:
a == b
a.equals(b)
a
String a = "Hello";
String b = a;
boolean zeigervergleich = a == b;
//true
boolean wertevergleich = a.equals(b); //true
•
•
Hello
b
Beispiel 2:
a
String a = "Hello";
String b = new String(a); //Kopie
boolean zeigervergleich = a == b;
//false
boolean wertevergleich = a.equals(b); //true
b
Beispiel 3:
a
String a = "Hello";
String b = "Hello";
boolean zeigervergleich = a == b;
Hello
Hello
Hello
//true
b
6/18
SWE1 Übung
DI Kerstin Altmanninger
Stringoperationen (1/2)
Überblick über die wichtigsten String Operationen der Java Bibliothek:
•
int number = str.length();
liefert die Anzahl der Zeichen in dem String str
•
char ch = str.charAt(3);
liefert das Zeichen mit dem Index 3 aus dem String str
•
int index = str.indexOf("ng");
liefert die Position des ersten Vorkommens von „ng“ in str oder -1 falls das
Suchmuster nicht vorkommt
•
int index = str.indexOf("ng", 5);
liefert die Position des erstens Vorkommens von „ng“ in str, beginnt mit der
Suche aber erst ab Position 5
•
int index = str.lastIndexOf("ng");
liefert die Position des letzten Vorkommens von „ng“ in str
7/18
SWE1 Übung
DI Kerstin Altmanninger
Stringoperationen (2/2)
Überblick über die wichtigsten String Operationen der Java Bibliothek:
•
String str2 = str.substring(2);
liefert den Teilstring von str ab der Position 2
•
String str2 = str.substring(2, 6);
liefert den Teilstring von s ab der Position 2 und bis (ausschließlich)
Position 6
•
if (str.startsWith("abc")) ...
liefert true, wenn str mit „abc“ beginnt
•
if (str.endsWith("abc")) ...
liefert true, wenn str mit „abc“ endet
8/18
SWE1 Übung
DI Kerstin Altmanninger
Aufbau eines Strings (1/4)
•
String-Objekte sind konstant und eignen sich daher nicht zum schrittweisen
Aufbau einer Zeichenkette
•
Daher wir ein String entweder
a) In seiner endgültigen Form erzeugt oder
b) In einem char-Array bzw.
c)
In einem StringBuffer-Objekt aufgebaut
und anschließend in ein String-Objekt umgewandelt
a) Erzeugung eines Strings aus einer Stringkonstante:
String str = "very simple"
9/18
SWE1 Übung
DI Kerstin Altmanninger
Aufbau eines Strings (2/4)
b) Erzeugung von Strings aus einem char-Array:
–
Schritt 1: String in char-Array zusammensetzen
–
Schritt 2: char-Array in String umwandeln
char[] a = new char[80];
//Einlesen der Zeichen fuer das char-Array
for (int i=0; i<80; i++) a[i] = IO.read();
//String-Objekt enhaelt eine Kopie der Zeichen in a
String str = new String(a);
//String-Objekt enhaelt eine Kopie der Zeichen von Index 2 bis 6 von a
String str2 = new String(a,2,7);
10/18
SWE1 Übung
DI Kerstin Altmanninger
Aufbau eines Strings (3/4)
c) Erzeugung von Strings aus einem StringBuffer:
–
–
–
StringBuffer verhält sich in vielen Dingen wie String
Kann aber editiert werden
Erzeugung eines leeren StringBuffer-Objektes:
StringBuffer strB = new StringBuffer();
Wichtigste StringBuffer Operationen:
•
Int number = strB.length();
Liefert die Anzahl der Zeichen in strB
•
strB.append(x);
hängt x and strB an (x kann vom Typ char, int, long, float, double,
boolean, String und char[] sein
•
strB.insert(pos,x);
fügt x an der Stelle pos in b ein
11/18
SWE1 Übung
DI Kerstin Altmanninger
Aufbau eines Strings (4/4)
Wichtigste StringBuffer Operationen:
•
strB.delete(from,to);
löscht die Zeichen von Position from (inclusive) bis Position to (exklusive)
aus strB
•
strB.replace(from,to,"abc");
ersetzt einen Teil von strB durch "abc"
•
String str = strB.substring(from,to);
liefert einen Teil von strB als String
•
Char ch = strB.charAt(i);
liefert das Zeichen mit Index i aus strB
•
strB.setChar(i,'x');
ersetzt das Zeichen mit Index i in strB durch 'x'
•
String str = strB.toString();
liefert einen String mit demselben Inhalt wie der StringBuffer strB
12/18
SWE1 Übung
DI Kerstin Altmanninger
Stringkonversionen
•
Manchmal ist es nötig, Werte verschiedener Typen (int, float, char[]) in
einen String umzuwandeln
•
Java Bibilothek bietet dafür geeignete Operationen
– Erzeugung einer Ziffernfolge in eine int-Zahl:
Int i = Integer.parseInt("123");
– Erzeugung einer Ziffernfolge in eine float-Zahl:
float f = Float.parseFloat("3.14");
– Erzeugung eines char-Array mit demselben Inhalt des Strings:
char[] a = s.toCharArray();
– Erzeugung eines Wert x in einen String:
(x kann vom Typ char, int, long, float, double, boolean oder char[] sein)
String s = String.valueOf(x);
Î Für die Ausgabe einer Folge von Werten als String ist es jedoch bequemer den
+ Operator zu verwenden
(konvertiert den Wert automatisch in einen String)
13/18
SWE1 Übung
DI Kerstin Altmanninger
Beispiel 1:
Palindrombestimmung (1/2)
•
•
•
•
Gegeben ist eine Liste text die einen Text in Form von Einzelzeichen beinhaltet.
Schreiben Sie eine Methode, die bestimmt, ob eine vorliegende Liste ein
Palindrom (von Rückwärts gelesen genauso wie von vorne) darstellt.
Der Rueckgabewert der Methode soll dementsprechend entweder true oder false
sein.
Parameter: char[] text = {'D','I','E','N','S','T','M','A','N',
'N','A','M','T','S','N','E','I','D'};
public static boolean palindrom(char[] text) {
for (int i=0; i<(int)(text.length/2); i++) {
if (text[i] != text[(text.length-i-1)]) {
return false; // character does not match: no palindrom!
}
}
return true; // palindrom found
} // end method palindrom
•
Parameter (NEU): String text = "DIENSTMANNAMTSNEID";
14/18
SWE1 Übung
DI Kerstin Altmanninger
Beispiel 1:
Palindrombestimmung (2/2)
Parameter (NEU): String text = "DIENSTMANNAMTSNEID";
public static boolean palindrom(String text) {
for (int i=0; i<(int)(text.length()/2); i++) {
if (text.charAt(i) != text.charAt(text.length()-i-1)) {
return false; // character does not match: no palindrom!
}
}
return true; // palindrom found
} // end method palindrom
15/18
SWE1 Übung
DI Kerstin Altmanninger
Beispiel 2:
Manipulation von Dateipfaden (1/2)
•
Ein Dateipfad besteht aus der Angabe von Verzeichnissen und dem
eigentlichen Dateinamen, z.B. Lecture\JavaProgs\Prog5.java
•
Eine der Aufgaben des Java-Compilers ist es, aus einem solchen Dateipfad
den Dateinamen herauszulösen und die Endung ".java" auf ".class" zu
ändern
•
Die Funktion className(path) soll diese Aufgabe mit Hilfe der
StringBuffer-Operationen lösen
•
Der Aufruf
String str = className("Lecture\JavaProgs\Prog5.java");
soll somit die Stringkonstante „Prog5.class“ liefern
•
Falls der Methode kein Pfad zu einem Java File übergeben wurde soll die
Fehlermeldung "Error: No Java file found" zurückgegeben werden
16/18
SWE1 Übung
DI Kerstin Altmanninger
Beispiel 2:
Manipulation von Dateipfaden (2/2)
public static String className(String path) {
//Creates a StringBuffer containing the path
StringBuffer b = new StringBuffer(path);
//if the path directs to a java file
if (path.endsWith(".java")) {
int len = path.length();
b.replace(len-5, len, ".class");
int i = path.lastIndexOf('\\');
if (i>=0) b.delete(0, i+1);
return b.toString();
}
else {
return "Error: No Java file found!";
}
}//end method className
17/18
SWE1 Übung
DI Kerstin Altmanninger
Beispiel 3:
Stringvergleich
•
Implementieren Sie eine Methode diff(s1,s2), die folgende Werte liefert:
-1
0
1
wenn a < b
wenn beide Strings (a und b) gleich sind
wenn a > b
static int diff(String a, String b) {
int i = 0, j = 0;
while (i<a.length() && j<b.length() && a.charAt(i)==b.charAt(j)) {
i++; j++;
}
if (i == a.length() && j == b.length()) return 0;
else if (i == a.length()) return -1;
else if (j == b.length()) return 1;
else if (a.charAt(i) < b.charAt(j)) return -1;
else return 1; //if (a.charAt(i) > b.charAt(j))
}//end method diff
18/18
SWE1 Übung
DI Kerstin Altmanninger
Herunterladen