- Utility Packages | Overview
- Utility Packages | String
- Utility Packages | StringBuilder
- JAVA-B1 | Numbers
- Utility Packages | Datum & Zeit
- Utility Packages | Random
- Utility Packages | Regular Expressions
- Utility Packages | Localization
- Utility Packages | Settings & Properties
- Utility Packages | Common File Operations
- Utility Packages | Example "Knotenverbindungen"
Overview
Utility Packages | Overview
Java bietet eine Vielzahl von Packages mitunter für die Verarbeitung von Zeichenfolgen, eine neue API für Datum und Zeitangaben, Erzeugung von Zufallszahlen, Formulieren und Prüfen von Regulären Ausdrücken, Lokalisation von Datumswerten und Zahlenformaten, Lesen einfacher Property-Dateien und vieles mehr. In diesem Themenblock geben wir einen groben Überblick.
Die meisten Klassen stammen aus dem Package java.util.*.
String
Utility Packages | String
Die Klasse String ist eine am häufigsten von Einsteigern für das Arbeiten mit Zeichenfolgen verwendete Klasse.
Strings haben eine kleine Besonderheit: Strings sind vom
Prinzip her zwar Objekte, allerdings wird bei jeder
Operation in Verbindung mit einem String das Objekt
neu erzeugt. Dieses führt dazu, dass man aus Gründen
der Performance erwägen kann, statt der
java.lang.String Klasse
mit String Builder zu arbeiten.
HINWEIS: Diese Inhalte dieses Themensbereichs zählen zu den Grundlagen von JAVA und werden aktuell überarbeitet.
StringBuilder
Utility Packages | StringBuilder
Die StringBuilder-Klasse bietet für den Fall häufiger
Operationen an einer Zeichenfolge eine bessere Performance
als die String und zählt
mitunter deshalb zu den grundlegenden Java Klassen, welche
jeder JAVA Entwickler kennen sollte.
Hat man die Programmiersprache JAVA im Mindestumfang
verstanden, ist die Verwendung von StringBuilder
fast selbst erklärend:
StringBuilder sb=new StringBuilder();
sb.append("Hallo").append(" Welt!");
String string = sb.toString();
HINWEIS: Diese Inhalte dieses Themensbereichs zählen zu den Grundlagen von JAVA und werden aktuell überarbeitet.
Numbers
JAVA-B1 | Numbers
Datum & Zeit
Utility Packages | Datum & Zeit
Das API für das Arbeiten mit Datum- und Zeitwerten wurde ab JAVA 8 durch ein neues Package grundlegend überarbeitet.
In Fällen, in denen in unseren Beispielen Datum- und Zeit-Angaben erzeugt oder verwendet werden, werden diese hierbei erläutert.
HINWEIS: Dieser Themenblock zum Arbeiten mit Datum und Zeit wird derzeit überarbeitet.
Random
Utility Packages | Random
Die Generierung von Zufallszahlen hat für Einsteiger die Bedeutung, dass man schnell Massen an Werten generieren kann. Für klassische Anwendungen geht die Bedeutung zurück, wobei überall dort, wo man dann doch verlässliche Zufallszahlen bedeutet, man sehr schnell erkennt, dass die Erzeugung von Zufallszahlen eine kleine Wissenschaft für sich sein kann.
Maßgebend zum Verständnis der Erzeugung von Zufallszahlen sind im Kern folgende Sachverhalte:
Die meisten Zufallszahlen-Generatoren beginnen die Erzeugung von Pseudo-Zufallszahlen in Verbindung aus einem Startwert welcher oftmals basierend auf der aktuellen Uhrzeit ermittelt wurde.
Für die Ermittlung eines Startwerts wird ein sogenannter
SEED-Wert verwendet. Initialisiert man Random
mit einem bekannten SEED-Wert und lässt sich dann 100 Zahlen zufällig
erzeugen, so stellt man fest, dass sich die Zahlenfolge jedesmal,
wenn man die Erzeugung mit diesem SEED-Wert neu beginnen lässt,
exakt wiederholt.
Zufallszahlen sind also nicht wirklich zufällig sondern basierend auf einem Algoritmus, welcher basierend auf der vorhergehenden Zahl und ein paar Parametern den ersten zufällig wirkenden Wert erzeugt.
Falls man nun mit dem selben SEED-Wert den Zufallszahlengenerator in verschiedenen Programmieresprachen identisch nachbilden will, so wird man feststellen, dass jede Programmiersprache intern die Zufallszahlen anders berechnet.
Will man also einen einheitlichen Algoritmus für solche Zahlenfolgen verwenden, so muss man diesen beispielsweise in Anlehnung an den MT Algoritmus selbst entwickeln.
HINWEIS: Dieser Themenblock zum Arbeiten mit Datum und Zeit wird derzeit überarbeitet.
Regular Expressions
Utility Packages | Regular Expressions
Regular Expressions dienen der Formulierung komplexer Muster für die Erkennung von Zeichenfolgen in String-Literalen. So ist es mitunter möglich, auf diesem Wege erkennen zu können, ob eine angegebene Telefon-Adresse, IP-Adresse oder E-Mail-Adresse ein korrektes Format hat.
Mindestwissen: Das zugehörige Muster bezeichent man engl. als
Pattern. Vor einer
Verwendung dieses Musters muss man es in Java
entsprechend über die .compile()
Methode entweder kompilieren oder man verwendet
andere Methoden, wo intern automatisch passiert.
Hat man in einer Zeichenfolge des entsprechende Muster als Pattern gefunden so bezeichnet man das als Match, dh. es passt.
Einmal abgesehen davon, dass die Syntax für Reguläre Ausdrücke eine gewisse Komplexität hat, gilt es ein paar grundlegende Problemstellungen als Hintergrundwissen zu kennen:
Multiple Matches: Da ein Muster mehrfach auftreten kann einer Zeichenfolge, kann es auch mehrere Ergebnisse als Treffer geben. Ob man nur den ersten oder alle Treffer haben möchte, muss der Entwickler selbst entscheiden.
Suchen nur in einer Zeile oder mehrzeiliges Suchen: Strings von Texten beinhalten oftmals einen \n oder \r\n für Zeilenumbrüche. Dieses kann dazu führen, dass aus zwei Worten bestehende Begriffe oder auch Namen nicht mehr durch Leerzeichen sondern durch Zeilenumbrüche getrennt sind. Die Regex-Syntax bietet Zusatzparameter, wie man solche Fragenstellungen löst.
Die KI war bereits in 2023 gut genug, um solide Reguläre Ausdrücke vorzuschlagen oder Fehler in Regex zu finden.
HINWEIS: Dieser Themenblock zum Arbeiten mit Datum und Zeit wird derzeit überarbeitet.
Localization
Utility Packages | Localization
Dezimalpunkt oder Dezimalkomma? Tausender-Trennzeichen mit Komma oder doch mit Punkt? Datumsformate wie 25. Juni oder 6/25? Ist der Sonntag oder doch der Montag der 1. Tag der Woche? Rund um das Thema Zahlen, Datum und Zeit gibt es eine ganze Reihe von Besonderheiten nicht nur bei der Ausgabe von Werten sondern bereits bei der Eingabe von Werten über die Konsole.
Für das korrekte Lesen und Schreiben sowie die Konvertierung
von Zeichenfolgen für Zahlen, Datum- und Zeitwerte gibt
es das Package java.util.Locatization.
Für den Fall, dass man als Entwickler Zahleneingaben
bei Konsolenanwendungen mit einem Dezimalpunkt wie
im Englischen schreiben will, bietet es sich an,
die Lokalisierung bei der Ausgabe und Verarbeitung
anzupassen.
Die meisten Einsteiger überspringen das Thema und verschieben die Einarbeitung auf den Zeitpunkt, an welchen man die ersten Probleme hat.
HINWEIS: Dieser Themenblock zum Arbeiten mit Datum und Zeit wird derzeit überarbeitet.
Settings & Properties
Utility Packages | Settings & Properties
Will man ein Programm nicht nur über Kommandozeilen-Parameter
beim Start konfigurieren sondern eine ganze Reihe von
Parametern als Settings oder Properties in einer Datei
angeben können, so bietet Java hierfür .properties
Dateien sowie den entsprechenden Reader.
Diese .properties-Dateien beinhalten Key-Value-Paare und damit Schlüssel-Wert-Paare
wie beispielsweise a = 22.
Die Besonderheit dieser Files besteht darin, dass sich Properties mehrsprachig realisieren lassen, so dass für eine weitere Sprachvariante für die Lokalisierung nur die Endung ergänzt werden muss.
Anmerkung: Wegen der eher einfachen linearen Struktur von Properties-Konfigurationen gehen viele Entwickler dazu über, die Konfiguration von Programmen alternativ im XML-Format oder JSON-Format oder YAML und weiteren Alternativen zu realisieren.
Common File Operations
Utility Packages | Common File Operations
Mal schnell den Inhalt einer Datei lesen oder Inhalte in eine Datei schreiben war mit den herkömmlichen java.io Klassen eine kleine Wissenschaft für sich. Mit java.nio wurde es etwas besser, aber viele Einsteiger stehen im Vergleich zu anderen Programmiersprachen bei Java vor einem Problem: Die Package- und Ordner-Struktur von Java-Anwendungen führt dazu, dass man Files im Package-Verzeichnis nicht findet.
Das Lesen von Dateien, welche sich im selben Verzeichnis befindet wie die zugehörige Java-Klasse, ist grundsätzlich möglich, da diese auch nach dem Compiling und Build üblicherweise mit den class-Files in Ordner kopiert oder aber auch im JAR enthalten sein wird.
Das Schreiben wiederum an die selbe Position zur Laufzeit macht nun allerdings keinen wirklichen Sinn, denn wird eine Anwendung neu kompiliert werden alle Ordner und Files überschrieben.
Für das Lesen und Schreiben von Dateien ist ein zugehöriger URI für file:// Adressen erforderlich. Dieses wird im Bereich der Netzwerk-Grundlagen, Network-Basics sowie auch Themen zu Zeichensatz, Syntax von URI erläutert.
Hinweis: Dieses Kapitel wird derzeit überarbeitet.
In Fällen, wo in Beispielen Dateien gelsen oder geschrieben werden, wird das Prinzip in der Doku erläutert.
Example "Knotenverbindungen"
Utility Packages | Example "Knotenverbindungen"
In diesem Beispiel werden aus einem XML-File die Knoten und Verbindungen für ein paar deutsche Städte sowie die Position von Paketen gelesen, die im Programmverlauf durch Konsolenbefehle aufgenommen und irgendwo auch wieder abgeladen werden können.
Mit Konsolenbefehlen wie !look, !move, !take, !top, !inv kann man sich im Netzwerk der Knoten und Verbindungen bewegen, Informationen über Items an Knoten gelangen oder eben Objekte auf- und ablegen. Knoten, englisch Nodes, speichern vereinfacht Spielerpositionen sowie Load- und DropPoints.
Links
FootNotes
Network-Basics, Netzwerk-Grundlagen, URI, Zeichensatz
UIO3 Es ist einfacher als Du denkst.
Stelle noch heute Deine Anfrage.

