Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Die Funktionsbibliothek
10 Threads und nebenläufige Programmierung
11 Raum und Zeit
12 Datenstrukturen und Algorithmen
13 Dateien und Datenströme
14 Die eXtensible Markup Language (XML)
15 Grafische Oberflächen mit Swing
16 Grafikprogrammierung
17 Netzwerkprogrammierung
18 Verteilte Programmierung mit RMI und Web-Services
19 JavaServer Pages und Servlets
20 Applets
21 Midlets und die Java ME
22 Datenbankmanagement mit JDBC
23 Reflection und Annotationen
24 Logging und Monitoring
25 Sicherheitskonzepte
26 Java Native Interface (JNI)
27 Dienstprogramme für die Java-Umgebung
A Die Begleit-DVD
Stichwort
Download: - ZIP, ca. 12,5 MB
Buch bestellen
Ihre Meinung?
<< zurück | Galileo Computing / <openbook> /Java-Insel | vor >>
Java ist auch eine Insel von Christian Ullenboom Programmieren mit der Java Standard Edition Version 6
Java ist auch eine Insel 7., aktualisierte Auflage geb., mit DVD (November 2007) 1.492 S., 49,90 Euro Galileo Computing ISBN 978-3-8362-1146-8 |
| 4 Der Umgang mit Zeichenketten
|  | 4.1 Einzelne Zeichen mit der Character-Klasse behandeln
|  | 4.2 Strings und deren Anwendung
|  |  | 4.2.1 String-Literale als String-Objekte für konstante Zeichenketten
|  |  | 4.2.2 String-Länge und Test auf Leerstring
|  |  | 4.2.3 Nach enthaltenen Zeichen und Zeichenfolgen suchen
|  |  | 4.2.4 Gut, dass wir verglichen haben
|  |  | 4.2.5 String-Teile extrahieren
|  |  | 4.2.6 Strings anhängen, Groß-/Kleinschreibung und Leerraum
|  |  | 4.2.7 Suchen und ersetzen
|  |  | 4.2.8 String-Objekte mit Konstruktoren neu anlegen
|  | 4.3 Konvertieren zwischen Primitiven und Strings
|  |  | 4.3.1 Unterschiedliche Typen in Zeichenketten konvertieren
|  |  | 4.3.2 String in primitives Element konvertieren
|  | 4.4 Veränderbare Zeichenketten mit StringBuffer/StringBuilder
|  |  | 4.4.1 Anlegen von StringBuffer/StringBuilder-Objekten
|  |  | 4.4.2 Die Länge eines StringBuffer/-Builder-Objekts
|  |  | 4.4.3 Daten anhängen
|  |  | 4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
|  |  | 4.4.5 Vergleichen von String/StringBuffer/StringBuilder
|  |  | 4.4.6 hashCode() bei StringBuffer/StringBuilder
|  | 4.5 Sprachabhängiges Vergleichen und Normalisierung
|  |  | 4.5.1 Die Klasse Collator
|  |  | 4.5.2 Effiziente interne Speicherung für die Sortierung
|  |  | 4.5.3 Normalisierung
|  | 4.6 Reguläre Ausdrücke
|  |  | 4.6.1 Die Klassen Pattern und Matcher
|  |  | 4.6.2 Mit MatchResult alle Ergebnisse einsammeln
|  | 4.7 Zerlegen von Zeichenketten
|  |  | 4.7.1 Splitten von Zeichenketten mit split()
|  |  | 4.7.2 split() in Pattern
|  |  | 4.7.3 Die Klasse Scanner
|  |  | 4.7.4 StringTokenizer
|  |  | 4.7.5 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner
|  | 4.8 Zeichenkodierungen und Base64
|  |  | 4.8.1 Über die Klasse String Kodierungen vornehmen
|  |  | 4.8.2 Konvertieren mit OutputStreamWriter-Klassen
|  |  | 4.8.3 Das Paket java.nio.charset
|  |  | 4.8.4 Base64-Kodierung
|  | 4.9 Formatieren von Ausgaben
|  |  | 4.9.1 Formatieren mit format() aus String
|  |  | 4.9.2 Die Format-Klassen im Überblick
|  |  | 4.9.3 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren
|  |  | 4.9.4 Ausgaben mit MessageFormat formatieren
|  | 4.10 Zum Weiterlesen
## 4.5 Sprachabhängiges Vergleichen und Normalisierung Für die deutsche Sprache gilt, dass »ä« zwischen »a« und »b« äquivalent zu »ae« einsortiert wird und nicht so, wie Unicode das Zeichen einordnet: hinter dem »z«. Ähnliches gilt für das »ß«. Auch das Spanische hat seine Besonderheiten im Alphabet. Hier gelten das »ch« und das »ll« als einzelner Buchstabe, die passend einsortiert werden müssen. Damit Java für alle Landessprachen die String-Vergleiche korrekt durchführen kann, bietet die Bibliothek Collator-Klassen. ### 4.5.1 Die Klasse Collator Mit den java.text.Collator-Objekten ist es möglich, Zeichenketten nach jeweils landesüblichen Kriterien zu vergleichen. So werden die Sprachbesonderheiten jedes Landes beachtet. Ein Collator-Objekt wird vor seiner Benutzung mit getInstance() erzeugt.
Beispiel Das »Ä« liegt zwischen »A« und »B«: Listing 4.4 CollatorDemo.java
    Collator col = Collator.getInstance();
    System.out.println( col.compare( "Armleuchter", "Ätsch" ) ); // –1
    System.out.println( col.compare( "Ätsch", "Bätsch" ) );      // –1
Die Fabrikmethode getInstance() nimmt optional einen Ländercode als Locale-Objekt an. Explizit setzt getInstance(Locale.GERMAN) das Vergleichsverfahren für deutsche Zeichenketten; die Länderbezeichnung ist in diesem Fall eine Konstante der Locale-Klasse. Standardmäßig nutzt getInstance() die aktuelle Einstellung des Systems. Hier klicken, um das Bild zu vergrößern
    abstract class java.text.Collator
    implements Comparator<Object>, Cloneable
static Collator getInstance() Liefert einen Collator für die aktuelle Landessprache. static Collator getInstance( Locale desiredLocale ) Liefert einen Collator für die gewünschte Sprache. abstract int compare( String source, String target ) Vergleicht die beiden Zeichenketten auf ihre Ordnung. Der Rückgabewert ist entweder <0, 0 oder >0. int compare( Object o1, Object o2 ) Vergleicht die beiden Argumente auf ihre Ordnung. Ruft compare((String)o1, (String)o2) auf. #### Vergleichsarten Die Collator-Klasse besitzt sinnvolle Methoden, die über die Vergleichsfunktionalität der String- und StringBuffer/StringBuilder-Klasse hinausgehen. So ist es über die Funktion setStrength() möglich, unterschiedliche Vergleichsarten einzustellen. Die Collator-Klasse deklariert vier Strenge-Konstanten: PRIMARY. Erkennt Unterschiede im Grundzeichen, sodass »a« kleiner »b« ist. Es gibt keine Unterschiede durch Akzente und Umlaute, sodass »a«, »ä« und »á« gleich sind. SECONDARY. Erkennt Zeichen mit Akzenten. So sind »a« und »á« nicht mehr gleich wie bei PRIMARY. TERTIARY. Unterscheidet in der Groß- und Kleinschreibung; bei PRIMARY und SECONDARY ist die Schreibweise egal, und da war »a« gleich »A«. IDENTICAL. Wirklich alle Unicode-Zeichen sind anders. Während die ersten drei Konstanten nicht sichtbare Buchstaben wie '\u0001' oder '\u0006' gleich behandeln, sind sie unter IDENTICAL wirklich unterschiedlich. Was die einzelnen Werte für jede Sprache bedeuten, beschreibt der Unicode-Standard präzise. Beispielsweise erkennt der tolerante Vergleich »abc« und »ABC« als gleich. Ohne explizit gesetztes setStrength() ist der Standard TERTIARY. Listing 4.5 CollatorStrengthDemo.java
    import java.util.*;
    import java.text.*;

    class CollatorStrengthDemo
    {
      static void compare( Collator col, String a, String b )
      {
        if ( col.compare( a, b ) < 0 )
          System.out.println( a + " < " + b );

        if ( col.compare( a, b ) == 0 )
          System.out.println( a + " = " + b );

        if ( col.compare( a, b ) > 0 )
          System.out.println( a + " > " + b );
      }

      public static void main( String[] args )
      {
        Collator col = Collator.getInstance( Locale.GERMAN );

        System.out.println( "Strength = PRIMARY" );
        col.setStrength( Collator.PRIMARY );
        compare( col, "abc", "ABC" );
        compare( col, "Quäken", "Quaken" );
        compare( col, "boß", "boss" );
        compare( col, "boß", "boxen" );

        System.out.printf( "%nStrength =  SECONDARY%n" );
        col.setStrength( Collator.SECONDARY );
        compare( col, "abc", "ABC" );
        compare( col, "Quäken", "Quaken" );
        compare( col, "boß", "boss" );
        compare( col, "boß", "boxen" );

        System.out.printf( "%nStrength =  TERTIARY%n" );
        col.setStrength( Collator.TERTIARY );
        compare( col, "abc", "ABC" );
        compare( col, "Quäken", "Quaken" );
        compare( col, "boß", "boss" );
        compare( col, "boß", "boxen" );
      }
    }
Die Ausgabe ist folgende:
    Strength = PRIMARY
    abc = ABC
    Quäken = Quaken
    boß = boss
    boß < boxen
    Strength =  SECONDARY
    abc = ABC
    Quäken > Quaken
    boß = boss
    boß < boxen
    Strength =  TERTIARY
    abc < ABC
    Quäken > Quaken
    boß > boss
    boß < boxen
### 4.5.2 Effiziente interne Speicherung für die Sortierung Obwohl sich mit der Collator-Klasse sprachspezifische Vergleiche korrekt umsetzen lassen, ist die Geschwindigkeit gegenüber einem normalen String-Vergleich geringer. Daher bietet die Collator-Klasse die Objektmethode getCollationKey() an, die ein CollationKey-Objekt liefert, das schnellere Vergleiche zulässt.
    Collator col = Collator.getInstance( Locale.GERMAN );
    CollationKey key1 = col.getCollationKey( "ätzend" );
    CollationKey key2 = col.getCollationKey( "Bremsspur" );
Durch CollationKeys lässt sich die Performance bei Vergleichen zusätzlich verbessern, da der landesspezifische String in einen dazu passenden, normalen Java-String umgewandelt wird, der dann schneller gemäß der internen Unicode-Zeichenkodierung verglichen werden kann. Dies bietet sich zum Beispiel beim Sortieren einer Tabelle an, wo mehrere Vergleiche mit einem gleichen String durchgeführt werden müssen. Der Vergleich wird mit compareTo(CollationKey) durchgeführt.
Beispiel Der Vergleich von key1 und key2 lässt sich durch folgende Zeile ausdrücken:
    int comp = key2.compareTo( key1 );
Das Ergebnis ist wie bei der compare()-Methode bei Collator-Objekten entweder <0, 0 oder >0.
    final class java.text.CollationKey
    implements Comparable<CollationKey>
int compareTo( CollationKey target ) Vergleicht zwei CollationKey-Objekte miteinander. int compareTo( Object o ) Vergleicht den aktuellen CollationKey mit dem angegebenen Objekt. Ruft lediglich compareTo((CollationKey)o) auf. byte[] toByteArray() Konvertiert den CollationKey in eine Folge von Bytes. boolean equals( Object target ) Testet die beiden CollationKey-Objekte auf Gleichheit. String getSourceString() Liefert den String zum CollationKey. int hashCode() Berechnet den Hashcode für den CollationKey.
    abstract class java.text.Collator
    implements Comparator<Object>, Cloneable
abstract CollationKey getCollationKey( String source ) Liefert einen CollationKey für den konkreten String.
Hinweis Das java.text-Paket hat weitere sehr interessante Schnittstellen. IBM stellt unter http://www.ibm.com/developerworks/java/library/j-text-searching.html weitere Typen, wie zum Beispiel RuleBasedCollator und CollationElementIterator, für Suchen vor.
### 4.5.3 Normalisierung Seit Java 6 [Die Klasse gab es schon lange vorher, doch war sie in einem Sun-Paket »versteckt«. ] gibt es die Klasse java.text.Normalizer, die Unicode-Normalisierung (http://unicode.org/faq/normalization.html) ermöglicht. Die Klasse bietet zwei einfache statische Funktionen: boolean isNormalized( CharSequence src, Normalizer.Form form ) String normalize( CharSequence src, Normalizer.Form form ) Der Normalizer normalisiert oder testet nach den Vorgaben des Unicode-Standards (http://www.unicode.org/unicode/reports/tr15/) einen String nach den Normalisierungs-Formaten NFC, NFD, NFKC und NFKD. ### Ihr Kommentar Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.
Name |
E-Mail |
Ihr Kommentar |
<< zurück | <top> | vor >>

Copyright © Galileo Press 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

[Galileo Computing]
Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de