Java 3 Sprachelemente und Anweisungen Strings

Werbung
3 Sprachelemente und Anweisungen
Strings (Zeichenketten)
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
ZK sind Objekte der Klasse String, d. h. sie besitzen Methoden
und Attribute. ZK sind nur lesbar und nicht veränderbar.
Veränderungen können nur über die Klasse StringBuffer
vorgenommen werden.
Die Instanzierung von Zeichenketten erfolgt durch
·
„Zeichenkette“
·
durch + bzw. += auf 2 Objekte der Klasse String
·
new String()
 „„
·
new String(String value)
Zwei grundlegende Methoden der Klasse ZK sind length() und
charAt(). length() gibt Anzahl der Zeichen zurück (organisiert als
Array) und ermöglicht so den Zugriff auf Elemente zwischen 0 oder
und length()-1  (IndexOutOfBoundsException)
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
class StringAnalyse {
public static void main(String args[]){
System.out.println("Beispiel StringAnalyse");
Eingabe strein = new Eingabe();
String str = strein.EingabeEinesString("Satz: (>40 Zeichen: ");
System.out.println("Der String lautet: " + str);
System.out.println("String-Länge:" + str.length()+ "Zeichen.");
//Zählung beginnt bei 0
System.out.println("Zeichen an Position 16 ist ein \"" +
str.charAt(16) + "\n"");
//Meth. startswith() und endswith() gibt Boolean-Wert zurück
System.out.println("Der String beginnt mit dem Wort \"Leben\":
" + str.startsWith("Leben"));
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
Mögliche Bildschirmausschrift:
Beispiel StringAnalyse
Geben Sie einen Satz ein (>40 Zeichen): Traeume nicht
Leben, sondern lebe Deine Traeume!
Dein
Der String lautet: Traeume nicht Dein Leben, sondern lebe Deine
Traeume!
Die
Das
Der
Der
Der
Der
Der
Der
Der
String-Laenge betraegt 53 Zeichen.
Zeichen an Position 16 ist ein "i"
String beginnt mit dem Wort "Leben": false
String endet mit dem Wort "Träume!": false
Index des ersten "L" ist 19
Index des letzten "L" ist: 34
Substring von Position 0 bis 2 ist Tra
Substring von Position 10 bis 20 ist: cht Dein L
Substring von Position 40 bis zum Ende ist: eine Traeume!
Press RETURN for exit ...
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
Strings sind nur lesbar und nicht veränderbar !!!
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
class ChangeString {
public static void main(String args[]) throws IOException
String aStr = "Geed ";
String bStr = "Merning!";
String cStr = aStr.concat(bStr);
System.out.println(cStr);
String aStr = aStr.concat(bStr);
System.out.println(aStr.concat(bStr));
{
// das geht nicht
// aber das geht
String dStr = cStr.replace('e', 'o');
System.out.println(dStr);
String eStr = dStr.toLowerCase();
System.out.println(eStr);
String fStr = eStr.toUpperCase();
System.out.println(fStr);
....
}
Java
HS Merseburg (FH) WS 06/07
// Kleinbuchstaben
3 Sprachelemente und Anweisungen
Bildschirmausschrift:
Geed Merning!
Geed Merning!
Good Morning!
good morning!
GOOD MORNING!
.....
Problem: Bei Zeichenketten in Ausdrücken wird für
Zwischenergebnis eine gesonderte String-Instanz benötigt.
jedes
Lösung: Benutzung eines Objektes der Klasse StringBuffer für ZK
in Ausdrücken. StringBuffer Objekte können verändert werden und
sind unabhängig von String.
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
class ChangeBuffer {
public static void main(String args[]) throws IOException
{
StringBuffer aBuff = new StringBuffer("Aller ist im
Fluss!");
System.out.println("Inhalt von aBuff: " + aBuff);
// Methode zur Manipulation der Pufferlänge
aBuff.setLength(10);
System.out.println("aBuff.setLenght(10) ausgeführt:");
System.out.println("Neuer Inhalt von aBuff: " + aBuff);
// Methode zur Manipulation des Pufferinhaltes
aBuff.setCharAt(4,'s');
System.out.println("aBuff.setCharAt(4,'s') ausgeführt:");
System.out.println("Neuer Inhalt von aBuff: " + aBuff);
....
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
Ausschrift:
Inhalt von aBuff: Aller ist im Fluss!
aBuff.setLenght(10) wurde ausgefuehrt:
Neuer Inhalt von aBuff: Aller ist
Kapazitaet und Laenge: 35Zeichen, 10Zeichen
aBuff.setCharAt(4, 's') wurde ausgefuehrt:
Neuer Inhalt von aBuff: Alles ist
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
Kapazität
StringBuffer hat eine Kapazität der Länge der ZK, die noch
gespeichert werden kann bevor mehr Platz angefordert wird. Der
Puffer wächst zwar automatisch, aber die einmalige Größenangabe
ist effizienter.
Vergleiche von Strings
Die internationalen Aspekte von Zeichen werden bei der Sortierung
nicht berücksichtigt. Der Ausgangspunkt für Vergleiche ist der
Unicode:
bsp: 1. aça und 2.acz
//ç(\u0E7)und c(\u063)im Alph. gleich, nicht
// Sortierung: 1. acz und 2. aça
Java
HS Merseburg (FH) WS 06/07
Unicode
3 Sprachelemente und Anweisungen
String.equals(String str)  liefert true wenn die übergebene
Objektreferenz auf ein Objekt mit gleichem Inhalt zeigt (gleiche
Länge und gleiche Unicodezeichefolge).
String.equalsIgnoreCase(String str)
unabhängig von Groß-/Kleinschreibung
ist
ein
ZK-Vergleich
int String.compareTo(String str) ergibt ein negatives Ergebnis
wenn str kleiner, 0 wenn gleich, und positiv wenn größer. Ist zur
Sortierung von ZK geeignet.
Beispiel:
binärer Suchalgorithmus auf sortiertes Array
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
private String[] feld;
public int position (String str) {
int lo = 0;
int hi = feld.length - 1;
while (lo <= hi) {
int mid = lo + (hi -lo) / 2;
int cmp = str.compareTo(feld[mid]);
if (cmp == 0)
//gefunden
return mid;
else if (cmp < 0)
// im unteren Bereich suchen
hi = mid - 1;
else
lo = mid + 1;
}
return -1;
// nicht gefunden
}
Java
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
Zeichenkettenumwandlung
Der Typ zu dem gewandelt wird, sollte eine Methode zur
Umwandlung besitzen.
Typ
nach String
boolean
String.valueOf(boolean)
new Boolean(String).booleanValue()
int
String.valueOf(int)
float
String.valueOf(float)
etc...
Java
von String
Integer.ParseInt(String, int base)
new Float(String).floatValue()
HS Merseburg (FH) WS 06/07
3 Sprachelemente und Anweisungen
String Übung:
Ziel:
•
Zugriff auf die Stringkomponenten und Auswertung
•
Zählen der Häufigkeit eines Buchstabens:
public class ZeichenZaehler {
public static void main (String args[]) {
String str = new String ("Java ist eine Sprache.");
long zeichenZaehler[] = new long [256]; // 65536
for (int i = 0; i < str.length(); i++)
zeichenZaehler[str.charAt(i)] ++;
for (int i = 0; i < zeichenZaehler.length; i++)
if (zeichenZaehler[i] > 0)
System.out.println((char)(i) + "\t[" + i +
"]\t- " + zeichenZaehler[i] + " mal");
}
}
Java
HS Merseburg (FH) WS 06/07
Herunterladen