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 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?

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

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
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 Zeichenketten konvertieren
Pfeil 4.3.2 String in primitives Element konvertieren
Pfeil 4.4 Veränderbare Zeichenketten mit StringBuffer/StringBuilder
Pfeil 4.4.1 Anlegen von StringBuffer/StringBuilder-Objekten
Pfeil 4.4.2 Die Länge eines StringBuffer/-Builder-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/StringBuffer/StringBuilder
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 Die Klassen Pattern und Matcher
Pfeil 4.6.2 Mit MatchResult alle Ergebnisse einsammeln
Pfeil 4.7 Zerlegen von Zeichenketten
Pfeil 4.7.1 Splitten von Zeichenketten mit split()
Pfeil 4.7.2 split() in Pattern
Pfeil 4.7.3 Die Klasse Scanner
Pfeil 4.7.4 StringTokenizer
Pfeil 4.7.5 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.9.4 Ausgaben mit MessageFormat formatieren
Pfeil 4.10 Zum Weiterlesen


Galileo Computing - Zum Seitenanfang

4.9 Formatieren von Ausgaben Zur nächsten ÜberschriftZur vorigen Überschrift

Immer wieder müssen Zahlen, Datumsangaben und Text auf verschiedenste Art und Weise formatiert werden. Zur Formatierung bietet Java zwei Lösungen:

  • Seit Java 5 realisieren die format()- und printf()-Funktionen eine Ausgabe, so wie sie unter C mit printf() gesetzt wurde.
  • Formatieren über Format-Klassen: Allgemeines Formatierungsverhalten wird in einer abstrakten Klasse Format fixiert; konkrete Unterklassen wie NumberFormat und DateFormat nehmen sich spezielle Datenformate vor.
    • Die Format-Klassen bieten nicht nur landes- bzw. sprachabhängige Ausgaben per format(), sondern auch den umgekehrten Weg, Zeichenketten wieder in die Typen wie double oder Date zu zerlegen. Jede Zeichenkette, die vom Format-Objekt erzeugt wurde, kann auch mit dem Parser wieder eingelesen werden.

Galileo Computing - Zum Seitenanfang

4.9.1 Formatieren mit format() aus String Zur nächsten ÜberschriftZur vorigen Überschrift

Die Klasse String stellt mit der statischen Funktion format() eine Möglichkeit bereit, Zeichenketten nach einer Vorgabe zu formatieren.

String[] arg = { "Ulli", "Tanja" }; 
String s = String.format( "Hallo %s. Es gab einen Anruf von %s.", arg ); 
System.out.println( s );    // Hallo Ulli. Es gab einen Anruf von Tanja.

Der erste übergebene String nennt sich Format-String. Er enthält neben auszugebenden Zeichen weitere so genannte Format-Spezifizierer, die dem Formatierer darüber Auskunft geben, wie er das Argument formatieren soll. %s steht für eine unformatierte Ausgabe eines Strings.


Tabelle 4.1 Format-Spezifierer im Überblick

%n

Neue Zeile

%b

Boolean

%%

Prozentzeichen

%s

String

%c

Unicode-Zeichen

%d

Dezimalzahl

%x

Hexadezimalschreibweise

%t

Datum und Zeit

%f

Fließkommazahl

%e

Wissenschaftliche Notation


Variable Argumentlisten und System.out.printf()

Mit der Schreibweise von Java 5 für variable Argumentlisten ist das eigene arg-Feld nicht nötig, sodass sich der Funktionsaufruf vereinfacht zu:

String s = String.format( "Hallo %s. Es gab einen Anruf von %s.", "Ulli", "Tanja" );

Praktischerweise ist das Formatieren und Ausgeben auch zu einer neuen Funktion printf() in den PrintWriter und PrintStream (das System.out-Objekt ist vom Typ PrintStream) gewandert, so dass sich jetzt auch schreiben lässt:

System.out.printf( "Hallo %s. Es gab einen Anruf von %s.", "Ulli", "Tanja" );

Auch bei printf() ist als erstes Argument ein Locale möglich.


final class java.lang.String 
implements CharSequence, Comparable<String>, Serializable

  • static String format( String format, Object... args ) Liefert einen formatierten String, der aus dem String und den Argumenten hervorgeht.
  • static String format( Locale l, String format, Object... args ) Liefert einen formatierten String, der aus der gewünschten Sprache, dem String und Argumenten hervorgeht.

Intern werkeln java.util.Formatter (keine java.text.Format-Objekte), die sich auch direkt verwenden lassen; dort ist auch die Dokumentation festgemacht.

Format-Spezifizierer

Die Anzahl der Format-Spezifizierer ist so groß und ihre weitere Parametrisierung so vielfältig, dass ein Blick in die API-Dokumentation auf jeden Fall nötig ist.

  • %n ergibt das/die Zeichen für den Zeilenvorschub, jeweils bezogen auf die aktuelle Plattform. Die Schreibweise ist einem harten \n vorzuziehen, da dies nicht das Zeilenvorschubzeichen der Plattform sein muss.
  • %% liefert das Prozentzeichen selbst, wie auch \\ in einem String den Backslash ausmaskiert.
  • %s liefert einen String, wobei null zur Ausgabe »null« führt. %S schreibt die Ausgabe groß.
  • %b schreibt ein Boolean, und zwar den Wert »true« oder »false« im Fall des Typs Boolean. Die Ausgabe ist immer »false« bei null und »true« bei anderen Typen wie Integer, String. %B schreibt den String groß.
  • %c schreibt ein Zeichen, wobei die Typen Character, Byte und Short erlaubt sind. %C schreibt das Zeichen in Großbuchstaben.
  • Für die ganzzahligen numerischen Ausgaben mit %d (Dezimal), %x (Hexadezimal), %o (Oktal) sind Byte, Short, Integer, Long und BigInteger erlaubt – %X schreibt die hexadezimalen Buchstaben groß.
  • Bei den Fließkommazahlen mit %f oder %e (%E), %g (%G), %a (%A) sind zusätzlich die Typen Float, Double und BigDecimal zulässig.
  • Im Fall von Datumsangaben mit %t bzw. %T sind erlaubt: Long, Calendar und Date. %t benötigt zwingend ein Suffix.
  • Den Hash-Code schreibt %h bzw. %H. Beim Wert null ist auch das Ergebnis »null«.

Zusätzliche Flags, etwa für Längenangaben und die Anzahl an Nachkommastellen, sind möglich und werden im folgenden Beispiel gezeigt.

Listing 4.15 PrintfDemo.java

import static java.lang.System.out; 
 
import java.util.Date; 
 
public class PrintfDemo 
{ 
 public static void main( String[] args ) 
 { 
  int i = 123; 
 
  out.printf( "|%d|   |%d|%n" ,     i, -i );   // |123|   |-123| 
  out.printf( "|%5d| |%5d|%n" ,     i, -i );   // |  123| | -123| 
  out.printf( "|%-5d| |%-5d|%n" ,   i, -i );   // |123  | |-123 | 
  out.printf( "|%+-5d| |%+-5d|%n" , i, -i );   // |+123 | |-123 | 
  out.printf( "|%05d| |%05d|%n%n",  i, -i );   // |00123| |-0123| 
 
  out.printf( "|%X| |%x|%n", 0xabc, 0xabc );   // |ABC| |abc| 
  out.printf( "|%08x| |%#x|%n%n", 0xabc, 0xabc ); // |00000abc| |0xabc| 
 
  double d = 12345.678; 
 
  out.printf( "|%f| |%f|%n" ,         d, -d ); // |12345,678000| |-12345,678000| 
  out.printf( "|%.2f| |%.2f|%n" ,     d, -d ); // |12345,68| |-12345,68| 
  out.printf( "|%,10f| |%,10f|%n" ,   d, -d ); // |1234,567800| |-1234,567800| 
  out.printf( "|%10.2f| |%10.2f|%n" , d, -d ); // |  12345,68| | –12345,68| 
  out.printf( "|%010.2f| |%010.2f|%n",d, -d ); // |0012345,68| |-012345,68| 
 
  String s = "Monsterbacke"; 
 
  out.printf( "%n|%s|%n", s );                 // |Monsterbacke| 
  out.printf( "|%20s|%n", s );                 // |        Monsterbacke| 
  out.printf( "|%-20s|%n", s );                // |Monsterbacke        | 
  out.printf( "|%7s|%n", s );                  // |Monsterbacke| 
  out.printf( "|%.7s|%n", s );                 // |Monster| 
  out.printf( "|%20.7s|%n", s );               // |             Monster| 
 
  Date t = new Date(); 
  out.printf( "%tT%n", t );                    // 11:01:39 
  out.printf( "%tD%n", t );                    // 05/23/06 
  out.printf( "%1$te. %1$tb%n", t );           // 23. Mai 
 } 
}

Eine Aufgabe wie »formatiere einen String rechtsbündig« ist mit der Methode format() einfach möglich. Im Fall von Fließkommazahlen werden diese nach dem Modus BigDecimal.ROUND_HALF_UP gerundet, so dass etwa System.out.format("%.1f", 0.45); die Ausgabe 0,5 ergibt.


Galileo Computing - Zum Seitenanfang

4.9.2 Die Format-Klassen im Überblick Zur nächsten ÜberschriftZur vorigen Überschrift

DateFormat, MessageFormat und NumberFormat erweitern die abstrakte Klasse Format. Die Unterklassen übernehmen die Ein-/Ausgabe für Datumsangaben, für allgemeine Programmmeldungen und für Zahlen.

Das Beispiel in der Tabelle zeigt Anwendungen der Klassen.


Tabelle 4.2 Formatobjekte im Einsatz
Ergebnis Formatiert mit

02.09.2005

DateFormat.getDateInstance().format( new Date() )

15:25:16

DateFormat.getTimeInstance().format( new Date() )

02.09.2005 15:25:16

DateFormat.getDateTimeInstance().format( new Date() )

12.345,679

NumberFormat.getInstance().format( 12345.6789 )

12.345,68 +

NumberFormat.getCurrencyInstance().format( 12345.6789 )

12 %

NumberFormat.getPercentInstance().format( 0.123 )


Jede dieser Klassen implementiert auf jeden Fall die Methode zur Ausgabe format() und zur Erkennung parseObject().


abstract class java.text.Format 
implements Serializable, Cloneable

  • String format( Object obj ) Formatiert das Objekt obj und gibt eine Zeichenkette zurück.
  • abstract StringBuffer format( Object obj, StringBuffer toAppendTo, FieldPosition pos ) Formatiert ein Objekt und hängt den Text an den angegebenen StringBuffer an. Kann die Zeichenkette nicht mit format() nach den Regeln des Format-Objekts ausgegeben werden, löst die Methode eine IllegalArgumentException aus. Ist die Formatierungsanweisung falsch, so gibt format() das Unicode-Zeichen \uFFFD zurück.
  • Object parseObject( String source ) Analysiert den Text von Anfang an.
  • abstract Object parseObject( String source, ParsePosition pos ) Der Text wird ab der Stelle pos umgewandelt. Konnte parseObject() die Zeichenkette nicht zurückübersetzen, so folgt eine ParseException. parseObject(String, Parse-Position) verändert das ParsePosition-Objekt nicht und gibt die null-Referenz zurück.
  • Object clone() Gibt eine Kopie zurück.

Die Mehrzahl der Format-Unterklassen implementiert Fabrikfunktionen der Art:

  • static XXXFormat getYYYInstance() Für ein Formatierungsobjekt mit den Formatierungsregeln für das voreingestellte Land.
  • static XXXFormat getYYYInstance( Locale l ) Für ein Formatierungsobjekt mit den Formatierungsregeln für das angegebene Land. So erlauben die Unterklassen von Format es dem Benutzer auch, weitere Objekte zu erzeugen, die an die speziellen Sprachbesonderheiten der Länder angepasst sind.

Galileo Computing - Zum Seitenanfang

4.9.3 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren Zur nächsten ÜberschriftZur vorigen Überschrift

NumberFormat widmet sich der Ausgabe von Zahlen. Dabei unterstützt die Klasse mit statischen Fabrikfunktionen – also keinen Konstruktoren – vier Typen von Ausgaben:


abstract class java.text.NumberFormat 
extends Format

  • static NumberFormat getNumberInstance() Gewöhnlicher Formatierer für Zahlen.
  • static NumberFormat getIntegerInstance() Liefert einen Formatierer, der den Nachkommateil abschneidet und rundet.
  • static NumberFormat getPercentInstance() Liefert einen Formatierer, der Fließkommazahlen über die format()-Methode im Bereich von 0 bis 1 annimmt und dann als Prozentzahl formatiert. Nachkommastellen werden abgeschnitten.
  • static NumberFormat getCurrencyInstance() Liefert einen Formatierer für Währungen, der ein Währungszeichen zur Ausgabe hinzufügt.

Die genannten vier Methoden gibt es jeweils in der parameterlosen Variante und in der Variante mit einem Locale-Objekt, um etwa das Währungszeichen oder das Kommazeichen anzupassen.

Dezimalzahlformatierung mit DecimalFormat

DecimalFormat ist eine Unterklasse von NumberFormat und ermöglicht individuellere Anpassungen an die Ausgabe. Dem Konstruktor kann ein Formatierungsstring übergeben werden, sozusagen eine Vorlage, wie die Zahlen zu formatieren sind. Die Formatierung einer Zahl durch DecimalFormat erfolgt mit Rücksicht auf die aktuell eingestellte Sprache.

Listing 4.16 DecimalFormatDemo.java, main()

double d = 12345.67890; 
DecimalFormat df = new DecimalFormat( "###,##0.00" ); 
System.out.println( df.format(d) );           // 12.345,68

Der Formatierungsstring kann eine Menge von Formatierungsanweisungen vertragen; im Beispiel kommen #, 0 und das Komma vor. Die beiden wichtigen Symbole sind jedoch 0 und #. Beide repräsentieren Ziffern. Der Unterschied tritt erst dann zu Tage, wenn weniger Zeichen zum Formatieren da sind, als im Formatierungsstring genannt werden.


Tabelle 4.3 Formatierungsanweisungen für DecimalFormat
Symbol Bedeutung

0

Repräsentiert eine Ziffer – ist die Stelle nicht belegt, wird eine Null angezeigt.

#

Repräsentiert eine Ziffer – ist die Stelle nicht belegt, bleibt sie leer, damit führende Nullen und unnötige Nullen hinter dem Komma nicht angezeigt werden.

.

Dezimaltrenner. Trennt Vor- und Nachkommastellen.

,

Gruppiert die Ziffern (eine Gruppe ist so groß wie der Abstand von "," zu ".").

;

Trennzeichen. Links davon steht das Muster für positive Zahlen, rechts das für negative Zahlen.

-

Das Standardzeichen für das Negativpräfix.

%

Die Zahl wird mit 100 multipliziert und als Prozentwert ausgewiesen.

\u2030

Die Zahl wird mit 1000 multipliziert und als Promillewert ausgezeichnet.

\u00A4

Nationales Währungssymbol (€ für Deutschland).

\u00A4\u00A4

Internationales Währungssymbol (EUR für Deutschland).

X

Alle anderen Zeichen – symbolisch X – können ganz normal benutzt werden.

'

Ausmarkieren von speziellen Symbolen im Präfix oder Suffix.


Hier ein Beispiel für die Auswirkungen der Formatanweisungen auf einige Zahlen:


Tabelle 4.4 Beispiel für verschiedene Formatanweisungen
Format Eingabezahl Ergebnis

0000

12

0012

0000

12,5

0012

0000

1234567

1234567

##

12

12

##

12.3456

12

##

123456

123456

.00

12.3456

12,35

.00

.3456

,35

0.00

.789

0,79

#.000000

12.34

12,340000

,###

12345678.901

12.345.679

#.#;(#.#)

12345678.901

12345678,9

#.#;(#.#)

–12345678.901

(12345678,9)

,###.## \u00A4

12345.6789

12.345,68 +

,#00.00 \u00A4\u00A4

–12345678.9

–12.345.678,90 EUR

,#00.00 \u00A4\u00A4

0.1

00,10 EUR



Galileo Computing - Zum Seitenanfang

4.9.4 Ausgaben mit MessageFormat formatieren topZur vorigen Überschrift

MessageFormat ist eine konkrete Unterklasse der abstrakten Klasse Format und dient dazu, Nachrichten sprachunabhängig zu erzeugen. Das heißt, die tatsächliche sprachabhängige Ausgabe wird so weit wie möglich nach hinten geschoben und erst dann erzeugt, wenn die Nachricht dem Benutzer angezeigt werden soll. Durch MessageFormat werden nur Formatierungsanweisungen gegeben, und die wirklichen Informationen (also die Objekte als Informationsträger) werden zur Laufzeit eingesetzt. Dabei enthalten die Formatierungsanweisungen Platzhalter für diese Objekte. In der Regel werden Daten (die Argumente) erst zur Laufzeit ermittelt, wie etwa die Zeilennummer einer Fehlerstelle in einer Eingabedatei.


Beispiel Beispiel Eine Anwendung des Formatierers. Der format()-Befehl formatiert die Argumente, die in einem Objekt-Feld abgelegt sind, mit dem Aussehen, wie es im Konstruktor des MessageFormat-Objekts angegeben wurde.

Object[] testArgs = { 31415L, "SchnelleLotte" }; 
MessageFormat form = new MessageFormat( 
    "Anzahl Dateien auf der Festplatte \"{1}\": {0}." ); 
System.out.println( form.format(testArgs) );

Die Ausgabe mit unterschiedlichen testArgs ist:

Anzahl Dateien auf der Festplatte "SchnelleLotte": 0. 
Anzahl Dateien auf der Festplatte "SchnelleLotte": 1. 
Anzahl Dateien auf der Festplatte "SchnelleLotte": 31,415.

Die Argumente aus dem Array werden über die Platzhalter wie {0} in die Nachricht eingefügt. Die Nummern entsprechen der Reihenfolge der Argumente im Array. Einträge im Array können ungenutzt bleiben. Fehlt allerdings das einem Platzhalter entsprechende Element im Feld, so wird eine ParseException ausgelöst.


class java.text.MessageFormat 
extends Format

  • MessageFormat( String pattern ) Erzeugt ein MessageFormat-Objekt mit dem angegebenen Pattern.

Gegenüber anderen Format-Klassen zeigt die Klasse MessageFormat eine Besonderheit beim Erzeugen. MessageFormat-Objekte werden über ihren Konstruktor erzeugt und nicht über getInstance(). Der Grund ist, dass üblicherweise die Erzeugungsmethoden – damit sind die getInstance()-Varianten gemeint – eine komplexe Initialisierung durchlaufen, die die landesspezifischen Einstellungen festlegen. MessageFormat ist aber an keine bestimmte Sprache gebunden und benötigt folglich auch keine Initialisierung.

Bildungsgesetz für Message-Formate

Die Zeichenkette für MessageFormat enthält die Format-Elemente, die in geschweiften Klammern gesetzt sind. Steht dort nur der Index – wie {0} –, ist das der einfachste Fall. Die API-Dokumentation von MessageFormat zeigt jedoch, dass die Angaben auch präziser ausfallen können:

  • { ArgumentIndex, FormatType }: Element wird nach dem angegebenen Format-Typ number, date, time oder choice formatiert. MessageFormat besorgt sich zum Beispiel im Fall vom Format-Typ number über NumberFormat.getInstance(getLocale()) einen passenden Formatierer.
  • { ArgumentIndex, FormatType, FormatStyle }: Neben dem Format-Typ lässt sich der Stil festlegen. Vordefiniert sind short, medium, long, full, integer, currency und percent. Ein eigener Formatierungsstil lässt sich auch angeben, der aber zur Unterscheidung in einfachen Hochkommata eingeschlossen werden muss.

Abschließend sei ein Beispiel mit MessageFormat gegeben, das das gleiche Argument unterschiedlich formatiert:

Listing 4.17 MessageFormatDemo.java, main()

Object[] arguments = { 
  new Date(), 
  "die Antwort auf alle Fragen", 
  42                                     // Integer object 
}; 
 
String result = MessageFormat.format( 
  "Am {0,date} um {0,time} ist {1} wie immer {2,number,integer}.", 
  arguments ); 
 
System.out.println( result );

Dies erzeugt die Ausgabe:

Am 21.08.2007 um 15:43:56 ist die Antwort auf alle Fragen wie immer 42.

Hinweis Hinweis Bei den geschweiften Klammern besteht Verwechslungsgefahr zwischen Message-Platzhalter und normalem Zeichen. Das ist insbesondere ein Problem, wenn die Nachricht mit den Platzhaltern eine beliebige Datei ist (etwa ein Java-Programm, in dem der Name der Klasse durch einen Platzhalter angedeutet ist). Dann muss jede normale geschweifte Klammer { durch \'{' ersetzt werden.




Ihr Kommentar

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






<< zurück



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