java-schulung - wieczorek-it.de web viewnur werden satzzeichen, die am word...
TRANSCRIPT
Java-Schulung
Java Schulung (Java 2 Java Development Kit 5 / 6)
Fortgeschrittene Programmierung1. Dokumentationskommentare
Dokumentation von Softwaresystemen ist wichtiger Bestandteil der Softwareentwicklung
Entwickler mssen im Entwicklungsprozess einzelne Komponenten beschreiben um sptere Wiederverwendung zu erleichtern
aus Kommentaren im Java-Quelltext werden ber Zusatzprogramm Textdateien mit gewnschten Informationen generiert
1.1 wichtige Dokumentationskommentare
Kommentar
Erluterung
@see Klassenname
Verweis auf eine andere Klasse
@see Klassen- oder Methodenname
Verweis auf eine andere Methode
@see Ausgeschriebener Klassenname
Verweis auf eine voll qualifizierte Klasse
@see Ausgeschriebener Klassen- oder Methodenname
Verweis auf eine voll qualifizierte Methode
@version Versionstext
Version
@author Autor
Schpfer
@return Rckgabetext
Rckgabewert
@param Parametername oder Parametertext
Beschreibung der Parameter
@exception Exception-Klassenname oder Exceptiontext
Ausnahmen, die ausgelst werden
@throws Exception-Klassenname oder Exceptiontext
Synonym zu oben
{ @link verweis }
Einen eingebauten Verweis im Text; Parameter sind wie bei @see
1.2 Mit javadoc eine Dokumentation erstellen
um Dokumentation zu erzeugen, wird dem Konsolenprogramm javadoc als Parameter der Dateiname der zu kommentierenden Klasse bergeben
wenn man Dokumentationen fr das gesamte Verzeichnis erstellen mchte, gibt man alle Dateien mit der Endung .java an
$ javadoc Beispiel.java
$ javadoc *.java
Beispielklasse
de.assona.docs.Auto im Projekt Day_5
2. Umgang mit Zeichenketten2.1 Regulre Ausdrcke
Paket java.util.regex enthlt Klassen, mit sich leicht Zeichenketten gegen ein Muster prfen lassen
prinzipiell besteht das Erkennen immer aus dem Aufbau eines Pattern-Objekts mit dem regulren Ausdruck und der Prfung
public static void main(String[] args) {
String toMatch = "aaaab";
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher(toMatch);
boolean b1 = m.matches();
// oder krzer:
boolean b2 = Pattern.matches("a*b", toMatch);
System.out.println("b1: " + b1);
System.out.println("b2: " + b2);
}
Methodenbersicht der Klasse Pattern
static Pattern compile( String regex ) bersetzt den regulren Ausdruck in ein Pattern-Objekt.
static Pattern compile( String regex, int flags ) bersetzt den regulren Ausdruck in ein Pattern-Objekt mit Flags. Als Flags sind CASE_INSENSITIVE, MULTILINE, DOTALL, UNICODE_CASE und CANON_EQ erlaubt.
int flags() Liefert die Flags, nach denen geprft wird.
Matcher matcher( CharSequence input ) Liefert ein Matcher-Objekt, das prft.
static boolean matches( String regex, CharSequence input ) Liefert true, wenn der regulre Ausdruck regex auf die Eingabe passt.
String pattern() Liefert den regulren Ausdruck, den das Pattern reprsentiert.
2.2 Zerlegen von Zeichenketten
Java-Bibliothek bietet Klassen zum Zerlegen von Zeichenketten nach bestimmten Mustern
Token: Teil eines Strings, der durch Trennzeichen (Delimiter) von anderen Token getrennt wird
StringTokenizer
dient dazu, Zeichenketten in Token zu zerlegen
Trenner knnen frei gewhlt werden
als Trenner nur einzelne Zeichen (also keine Zeichenketten) mglich
public static void main(String[] args) {
String s = "Franz jagt im komplett verwahrlosten Taxi quer durch " + "Bayern.";
StringTokenizer st = new StringTokenizer(s, " ");
while (st.hasMoreTokens())
System.out.println(st.nextToken());
}
Methodenbersicht der Klasse StringTokenizer
StringTokenizer( String str, String delim, boolean returnDelims ) Ein String-Tokenizer fr str, wobei jedes Zeichen in delim als Trennzeichen gilt. Ist returnDelims gleich true, so sind auch die Trennzeichen Token der Aufzhlung.
StringTokenizer( String str, String delim ) Ein String-Tokenizer fr str, wobei alle Zeichen in delim als Trennzeichen gelten. Entspricht dem Aufruf von this(str, delim, false);
StringTokenizer( String str ) Ein String-Tokenizer fr str. Entspricht dem Aufruf von this(str, " \t\n\r\f", false);. Die Trennzeichen sind Leerzeichen, Tabulator, Zeilenende und Seitenvorschub.
boolean hasMoreTokens(), boolean hasMoreElements() Testet, ob weitere Token verfgbar sind. hasMoreElements() implementiert die Methode fr Enumeration.
String nextToken(), Object nextElement() Liefert das nchste Token vom String-Tokenizer. nextElement() existiert nur, damit der Tokenizer als Enumeration benutzt werden kann. Der weniger spezifische Ergebnistyp Object macht eine Typumwandlung erforderlich.
String nextToken( String delim ) Setzt die Delimiter-Zeichen neu und liefert anschlieend das nchste Token.
int countTokens() Zhlt die Anzahl der noch mglichen nextToken()-Methodenaufrufe, ohne die aktuelle Position zu berhren. Der Aufruf der Funktion ist nicht billig.
Scanner
seit Java 5 dabei (java.util Package)
gibt wie StringTokenizer auch Token fr Token aus; Delimiter kann hier allerdings ein regulrer Ausdruck sein
zustzlich lsst sich ber die Methode findInLine() eine Zeile suchen, auf die ein Ausdruck passt
nach Erzeugen bieten sich unterschiedliche nextXxx()-Methoden an, die das nchste Token einlesen und in ein gewnschtes Format konvertieren (z.B. in einen Double bei nextDouble())
ber gleich viele hasNextXxx()-Methoden lsst sich erfragen, ob noch ein Token folgt
public static void main(String[] args) {
// Von Standardeingabe soll ein int gelesen werden
Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();
// String s enthlt eine Zeile wie a := b
String s = "Url := http://java.sun.com";
scanner = new Scanner(s).useDelimiter("\\s*:=\\s*");
while (scanner.hasNext())
System.out.println(scanner.next());
}
Ausgabe
1
Url
http://java.sun.com
BreakIterator als Wort- und SatztrennerMethodenbersicht der Klasse BreakIterator
static BreakIterator getCharacterInstance()
static BreakIterator getCharacterInstance( Locale where ) Trennt nach Zeichen. Vergleichbar einer Iteration ber charAt().
static BreakIterator getSentenceInstance()
static BreakIterator getSentenceInstance( Locale where ) Trennt nach Stzen. Delimiter sind bliche Satz-Trenner wie ., !, ?.
static BreakIterator getWordInstance()
static BreakIterator getWordInstance( Locale where ) Trennt nach Wrtern. Trenner wie Leerzeichen und Satzzeichen gelten ebenfalls als Wrter.
static BreakIterator getLineInstance()
static BreakIterator getLineInstance( Locale where ) Trennt nicht nach Zeilen, wie der Name vermuten lsst, sondern ebenfalls nach Wrtern. Nur werden Satzzeichen, die am Word hngen, zum Wort hinzugezhlt. Praktisch ist dies fr Algorithmen, die Textblcke in eine bestimmte Breite bringen wollen. Ein Beispiel fr die drei Typen zeigt das gleich folgende Programm.
Beispiel
public static void main(String[] args) {
String helmutKohl = "Ich wei, dass ich 1945 fnfzehn war und "
+ "1953 achtzehn.";
BreakIterator iterator = BreakIterator.getWordInstance();
iterator.setText(helmutKohl);
out(helmutKohl, iterator);
helmutKohl = "Das deutsche Volk hat nun mal beschlossen, "
+ "weniger Kinder zu zeugen. "
+ "Das ist eine Sache, die wir nicht mal den "
+ "Sozialdemokraten anhngen knnen.";
iterator = BreakIterator.getSentenceInstance(Locale.GERMAN);
iterator.setText(helmutKohl);
out(helmutKohl, iterator);
}
static void out(String s, BreakIterator iter) {
int last = iter.first();
int next = iter.next();
for (; next != BreakIterator.DONE; next = iter.next()) {
System.out.println(s.subSequence(last, next));
last = next;
}
}
2.3 Formatieren von Ausgaben
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.
Formatieren mit format() aus String
String stellt mit statischer Methode format() Mglichkeit bereit, Zeichenketten nach Vorgabe zu formatieren
Beispiel: StringFormat.java
public static void main(String[] args) {
// Variable Anzahl an Argutmenten
Object[] 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.
// Mit der Schreibweise von Java 5 ist auch folgends mglich
String s1 = String.format(Hallo %s. Es gab einen Anruf von %s.,
Ulli, Tanja);
// Und auch
System.out.printf(Hallo %s. Es gab einen Anruf von %s., Ulli,
Tanja);
}
Formatspezifizierer
%n
Neue Zeile
%b
Boolean
%%
Prozentzeichen
%s
String
%c
Unicode-Zeichen
%d
Dezimalzahl
%x
Hexadezimalschreibweise
%t
Datum und Zeit
%f
Fliekommazahl
%e
Wissenschaftliche Notation
%n ergibt das/die Zeichen fr den Zeilenvorschub