uio--WebPageMain-Module
A3 JAVA-A3 JAVA-A3 Utility Packages String String Formatting StringBuilder Numbers: Typen, Wrapper, Rechnen DateTime LocalDateTime Zufall Random Seed Pseudo-Zufallszahlen mit MT Pseudo-Zufallszahlen mit MT RegularExpressions Pattern Match Localization Localization Settings Property Files Common File Operations Beispiel Knoten und Verbindungen in XML

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

    UI ORGANIZED.

    UIO3 Es ist einfacher als Du denkst.

    Stelle noch heute Deine Anfrage.

    uio--WebPageFooter-Module