Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
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 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel (8. Auflage)

Java ist auch eine Insel (8. Aufl.)
8., aktual. Auflage, geb., mit DVD
1.475 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1371-4
Pfeil 4 Der Umgang mit Zeichenketten
Pfeil 4.1 Einzelne Zeichen mit der Character-Klasse behandeln
Pfeil 4.2 Strings und deren Anwendung
Pfeil 4.2.1 String-Literale als String-Objekte für konstante Zeichenketten
Pfeil 4.2.2 String-Länge und Test auf Leerstring
Pfeil 4.2.3 Nach enthaltenen Zeichen und Zeichenfolgen suchen
Pfeil 4.2.4 Gut, dass wir verglichen haben
Pfeil 4.2.5 String-Teile extrahieren
Pfeil 4.2.6 Strings anhängen, Groß-/Kleinschreibung und Leerraum
Pfeil 4.2.7 Suchen und ersetzen
Pfeil 4.2.8 String-Objekte mit Konstruktoren neu anlegen
Pfeil 4.3 Konvertieren zwischen Primitiven und Strings
Pfeil 4.3.1 Unterschiedliche Typen in String-Repräsentationen konvertieren
Pfeil 4.3.2 String in primitives Element konvertieren
Pfeil 4.4 Veränderbare Zeichenketten mit StringBuilder/StringBuffer
Pfeil 4.4.1 Anlegen von StringBuilder-/StringBuffer-Objekten
Pfeil 4.4.2 Die Länge eines StringBuilder-/StringBuffer-Objekts
Pfeil 4.4.3 Daten anhängen
Pfeil 4.4.4 Zeichen(folgen) setzen, erfragen, löschen und umdrehen
Pfeil 4.4.5 Vergleichen von String/StringBuilder/StringBuffer
Pfeil 4.4.6 hashCode() bei StringBuffer/StringBuilder
Pfeil 4.5 Sprachabhängiges Vergleichen und Normalisierung
Pfeil 4.5.1 Die Klasse Collator
Pfeil 4.5.2 Effiziente interne Speicherung für die Sortierung
Pfeil 4.5.3 Normalisierung
Pfeil 4.6 Reguläre Ausdrücke
Pfeil 4.6.1 Arbeiten mit der Fassade: String.matches()
Pfeil 4.6.2 Die Klassen Pattern und Matcher
Pfeil 4.6.3 Quantifizierer und Wiederholungen
Pfeil 4.6.4 Finden und nicht matchen
Pfeil 4.6.5 Gierige und nicht gierige Operatoren
Pfeil 4.6.6 Mit MatchResult alle Ergebnisse einsammeln
Pfeil 4.7 Zerlegen von Zeichenketten
Pfeil 4.7.1 Splitten von Zeichenketten mit split()
Pfeil 4.7.2 Die Klasse Scanner
Pfeil 4.7.3 StringTokenizer
Pfeil 4.7.4 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner
Pfeil 4.8 Zeichenkodierungen und Base64
Pfeil 4.8.1 Über die Klasse String Kodierungen vornehmen
Pfeil 4.8.2 Konvertieren mit OutputStreamWriter-Klassen
Pfeil 4.8.3 Das Paket java.nio.charset
Pfeil 4.8.4 Base64-Kodierung
Pfeil 4.9 Formatieren von Ausgaben
Pfeil 4.9.1 Formatieren mit format() aus String
Pfeil 4.9.2 Die Format-Klassen im Überblick
Pfeil 4.9.3 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren
Pfeil 4.10 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

4.8 Zeichenkodierungen und Base64 Zur nächsten ÜberschriftZur vorigen Überschrift

Einzelne Zeichen sind in Java intern immer in 16 Bit Unicode kodiert, und ein String ist eine Folge von Unicode-Zeichen. Wollen wir diese Unicode-Zeichenkette in eine Datei schreiben, können mitunter andere Programme die Dateien nicht wieder einlesen, da sie kein Unicode erwarten oder damit umgehen können. Die Unicode-Strings müssen daher in unterschiedliche Codepages, etwa 8 Bit Latin-1, umkodiert werden.


Galileo Computing - Zum Seitenanfang

4.8.1 Über die Klasse String Kodierungen vornehmen Zur nächsten ÜberschriftZur vorigen Überschrift

Die String-Klasse konvertiert mit der Methode getBytes(String charsetName) bzw. getBytes(Charset charset) den String in ein Byte-Feld mit einer bestimmten Zeichen-Kodierung. Auf diese Weise kann Java die interne Unicode-Repräsentation zum Beispiel in den EBCDIC-Zeichensatz eines IBM-Mainframes übertragen. Sun repräsentiert jede Kodierung (engl. encoding) durch eine Zeichenfolge oder ein Charset-Objekt; die Namen sind unter http://tutego.com/go/encoding aufgeführt. Für den EBCDIC-Zeichensatz ist das die Codepage »Cp037«. Die DOS-Konsole unter Windows nutzt einen veränderten IBM-Zeichensatz, dessen Codepage »Cp850« heißt.


Beispiel Kodiere den String »Vernaschen« in EBCDIC:

try 
{ 
  byte[] ebcdic = "Vernaschen".getBytes( "Cp037" ); 
  System.out.println( Arrays.toString(ebcdic) ); 
  // [-27, –123, –103, –107, –127, –94, –125, –120, –123, –107] 
} 
catch ( UnsupportedEncodingException e ) { ... }

Zur Kodierung in die andere Richtung, also von einem Byte-Feld in einen Unicode-String, ist ein Konstruktor der String-Klasse mit der Kodierung zu nutzen. Auch hier kann eine UnsupportedEncodingException folgen, wenn es die Kodierung nicht gibt.


Beispiel Kodiere das Byte-Feld mit den Zeichen nach dem EBCDIC-Alphabet zurück in einen String:

byte[] ebcdic = "Vernaschen".getBytes( "Cp037" ); 
String s = new String( ebcdic, "Cp037" ); 
System.out.println( s );                  // Vernaschen


Galileo Computing - Zum Seitenanfang

4.8.2 Konvertieren mit OutputStreamWriter-Klassen Zur nächsten ÜberschriftZur vorigen Überschrift

Neben der Klasse String mit getBytes() unterstützen auch andere Klassen die Umkodierung. Dazu zählt die Klasse OutputStreamWriter, die als Writer die Unicode-Zeichen mit einer gewählten Kodierung in einen binären Datenstrom schreibt. Der InputStreamReader übernimmt den anderen Weg zum Lesen von Byte-Folgen und Konvertieren in Unicode.


Beispiel Zum korrekten Darstellen der Umlaute auf der DOS-Konsole wird ein OutputStreamWriter mit der Codepage 850 (DOS-Latin-1) verwendet:

Listing 4.22 GetBytesConverter.java, main()

try 
{ 
  System.out.println( "Ich kann Ä Ü Ö und ß" ); 
  PrintWriter out = new PrintWriter( 
    new OutputStreamWriter(System.out, "Cp850") ); 
  out.println( "Ich kann Ä Ü Ö und ß" ); 
  out.flush(); 
} 
catch ( UnsupportedEncodingException e ) { 
  System.err.println(e); } 
}

Die Standard-Kodierung von Windows, Cp1252 (Windows-1252 beziehungsweise Windows Latin 1), ist eine Anpassung von ISO 8859-1, die in den Bereich 0x80 bis 0x9f andere Zeichen setzt.


Sollen ganze Dateien umkodiert werden, lässt sich auf der Kommandozeile das Dienstprogramm native2ascii nutzen.


Galileo Computing - Zum Seitenanfang

4.8.3 Das Paket java.nio.charset Zur nächsten ÜberschriftZur vorigen Überschrift

Seit Java 1.4 übernimmt das Paket java.nio.charset im Hintergrund die Kodierungen. Die statische Funktion Charset.availableCharsets() liefert eine Map<String,Charset> – mit etwa 150 Einträgen – und somit Namen und assoziierte Klassen aller angemeldeten Kodierer. Die konkreten Kodierungsklassen erfragen auch Charset.forName().

for ( String charsetName : Charset.availableCharsets().keySet() ) 
{ 
  System.out.println( charsetName ); 
  Charset charset = Charset.forName( charsetName ); 
  System.out.println( charset );      // Ausgabe wie oben 
}

Mit dem konkreten Charset-Objekt lässt sich auf zwei Wegen weiter verfahren:

  • Direkt mit den Methoden encode() und decode() konvertieren oder
  • über die Methode newDecoder() einen CharsetDecoder beziehungsweise über newEncoder() einen CharsetEncoder erfragen und damit arbeiten.

Galileo Computing - Zum Seitenanfang

4.8.4 Base64-Kodierung topZur vorigen Überschrift

Für die Übertragung von Binärdaten hat sich im Internet die Base64-Kodierung durchgesetzt, die zum Beispiel bei E-Mail-Anhängen und SOAP-Nachrichten zu finden ist. Die im RFC 1521 beschriebene Methode übersetzt drei Bytes (24 Bit) in vier Base64-kodierte Zeichen (4 Zeichen mit jeweils 6 repräsentativen Bits). Die Base64-Zeichen bestehen aus den Buchstaben des lateinischen Alphabets, den Ziffern 0 bis 9 sowie »+«, »/« und »=«. Die Konsequenz dieser Umformung ist, dass Binärdaten rund 33 % größer werden.

Sun liefert zwar in der Java-Bibliothek Unterstützung für diese Umsetzung, aber nicht ganz legal: Die Kodierer liegen im nicht-öffentlichen Paket sun.misc. Wem das nicht ganz geheuer ist, der kann unter http://jakarta.apache.org/commons/codec/ die Commons-Bibliothek beziehen.

Das folgende Beispiel erzeugt zuerst ein Byte-Feld der Größe 112 und belegt es mit Zufallszahlen. Sun-Klassen kodieren das Byte-Feld in einen String, der auf dem Bildschirm ausgegeben wird. Nachdem der String wieder zurückkodiert wurde, werden die Byte-Felder verglichen und liefern natürlich true.

Listing 4.23 Base64Demo.java

import java.io.IOException; 
import java.util.*; 
import sun.misc.*; 
 
public class Base64Demo 
{ 
  public static void main( String[] args ) throws IOException 
  { 
    byte[] bytes1 = new byte[ 112 ]; 
    new Random().nextBytes( bytes1 ); 
 
    // Convert byte array to String 
    String s = new BASE64Encoder().encode( bytes1 ); 
    System.out.println( s ); 
 
    // String s contains for example: 
    // QFgwDyiQ28/4GsF75fqLMj/bAIWNwOuBmE/SCl3H2XQFpSsSz0jtyR0LU+kLiwWsnSUZljJr97Hy 
    // LA3YUbf96Ym2zx9F9Y1N7P5lsOCb/vr2crTQ/gXs757qaJF9E3szMN+E0CSSslDrrzcNBrlcQg== 
 
 
    // Convert String back to byte[] 
    byte[] bytes2 = new BASE64Decoder().decodeBuffer( s ); 
    System.out.println( Arrays.equals(bytes1, bytes2) );    // true 
  } 
}


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Objektorientierte Programmierung





 Objektorientierte
 Programmierung


Zum Katalog: Einstieg in Eclipse 3.4






 Einstieg in
 Eclipse 3.4


Zum Katalog: Java 6 lernen mit Eclipse






 Java 6 lernen
 mit Eclipse


Zum Katalog: NetBeans Platform 6






 NetBeans
 Platform 6


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
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