Ein- und Ausgabe

Ausgabe mit java.lang.System.out

System.out.printf("Juhu %n");
System.out.println("Hello");
System.out.print(", World!");

Eingabe mit java.util.Scanner

import java.util.*;
 
Scanner input = new Scanner(System.in);
 
int i = input.nextInt();
float f = input.nextFloat();
double d = input.nextDouble();
boolean b = input.nextBoolean();
String s = input.nextLine();
 
input.close();

Dateien einlesen

import java.io.*;
import java.util.*;
 
class Beispiel {
 
    public static void main(String[] args) 
    throws FileNotFoundException {
    
        Scanner datei = new Scanner(new File("Test.txt"));
        int zähler = 1;
        
        while (datei.hasNextLine())
            System.out.println(
                zähler++ + ": " + datei.nextLine()
            );
            
        datei.close();
        
    }
}

Strings

Zuweisung

  • Einmal erzeugte Strings sind unveränderbar (immutable)
  • Alle Methoden, die scheinbar einen String verändern, liefern in Wirklichkeit eine veränderte Kopie, das Original bleibt unverändert

Mehrzeilige Strings

System.out.println("Das ist die erste Zeile\n" +
    "das die zweite und\n" +
    "das die dritte.");
 
// Hinter den ersten Anführungszeichen darf nur Leerraum stehen
System.out.println("""
    This is the first line
    this the second and
    this the third.""");

Gleichheit prüfen

String s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
 
System.out.println(s1 == s2);      // true
System.out.println(s1 == s3);      // false
System.out.println(s1.equals(s3)); // true
  • Compiler sieht, dass s1 und s2 den gleichen Inhalt haben und weist ihnen deshalb die selbe Referenz zu
  • s3 ist aber eine andere Referenz, deswegen funktioniert der Vergleich mit == nicht
  • Um auf Gleichheit von Strings zu prüfen, verwendet man string1.equals(string2)

Method chaining

System.out.println("Dies ist ein kleines Beispiel"
    .replace("Dies", " DIESES Beispiel")
    .strip()
    .toLowerCase());

Ausgabe:

dieses beispiel ist ein kleines beispiel

Die Klasse StringBuilder

  • Da Strings immutable sind können diese wenn sie dauernd verändert werden die Performance beeinträchtigen
  • Auch gibt es für den normalen String viele hilfreiche Funktionen nicht, z.B. um einen String umzukehren
  • Abhilfe schafft die Klasse StringBuilder:
var s = new StringBuilder("Neuburg");
s.append(" Donau");
s.insert(7, " an der blauen");

Inhalt von s nach der jeweiligen Zeile:

Neuburg
Neuburg Donau
Neuburg an der blauen Donau

Verketten von Strings

1 + 2           // 3
1 + 2 + "->"    // 3->
"->" + 1 + 2    // ->12
"->" + (1 + 2)  // ->3
"" + 1 + 2      // 12
 
Object o1 = new Object();
Object o2 = null;
 
"p: " + p       // p: Person@1cde100
"q: " + q       // q: null

Auswahl an String-Funktionen

// Liefert die Länge des Strings
int length()
 
// Liefert das Zeichen an Position index
char charAt(int index)
 
// Liefert Teilstring[a .. b-1]
String substring(int a, int b) 
 
// Entfernt whitespace vorne und hinten
String strip()
 
// Gibt Wahrheitswert zurück, ob Kondition stimmt
boolean isEmpty()
boolean isBlank()
boolean startsWith(String s)
boolean endsWith(String s)
 
// Liefert index wo c oder s das 
// erste/letzte mal vorkommt oder -1
int indexOf(char c)
int indexOf(String s)
int lastIndexOf(char c)
int lastIndexOf(String s)
 
// Liefert Kopie in Klein-/Großbuchstaben
String toLowerCase()
String toUpperCase()
 
// Ersetzt alle a durch b
String replace(char a, char b)
String replace(String a, String b)
 
// Liefert diesen String n-fach verkettet
String repeat(int n)
 
// Gibt einen formatierten String zurück
// (ähnlich wie bei printf)
// Kann Gebietsschemen verwenden (z.B. werden bei
// Locale.GERMANY Kommazahlen mit Komma gerendert)
String format(String format, Object... args)
String format (Locale l, String format, Object... args)
 
// Verbindet mehrere Strings
String join(String delimiter, String... elements)
 
// Zerlegt diesen String in Teilstrings an den
// in regex angegebenen Trennstellen
String[] split(String regex)
 
// Wandelt diesen String in ein neues char-Array um.
// Hilfreich, da man über Strings nicht iterieren kann,
// über Arrays aber schon.
char[] toCharArray()

Arrays

  • Anders als in C sind Arrays in Java ganz normale Datentypen, die sowohl valide Parameter sowie Rückgabewerte sind

Initialisieren von Arrays

int[] vektor;
vektor = new int[3];
 
// Array-Elemente initialisieren
vektor[0] = 47; 
vektor[1] = 11;
vektor[2] = 42;
 
// ODER
int[] vektor;
vektor = new int[] {47, 11, 42}; // keine Längenangabe erlaubt!
 
// ODER
int[] vektor = new int[] {47, 11, 42};
 
// ODER
int[] vektor = {47, 11, 42}

Arrays aus Objekten:

Rechteck[] reihe = new Rechteck[3]; // new Array
 
reihe[0] = new Rechteck(3, 4); // new Rechteck
reihe[1] = new Rechteck(5, 3);
reihe[2] = new Rechteck(4, 2);
 
// ODER
 
Rechteck[] reihe = {
    new Rechteck(3, 4),
    new Rechteck(5, 3),
    new Rechteck(4, 2)
};

Über Arrays iterieren

String[] satz = {"Dies", "ist", "ein", "Beispiel"};
 
for (var s : satz) 
    System.out.println(s);

Varargs

int summe(int... v) {
    int summe = 0;
    for (int i = 0; i < v.length; i++) summe += v[i];
    return summe;
}

Auswahl an Array-Funktionen

// Liefert die Anzahl der Einträge des Arrays
int length()
 
// Weist jedem Element aus a den Wert val zu
void fill(int[] a, int val)
 
// Sortiert gemäß natürlicher Ordnung
// Bzw. mit c gemäß der durch c festgelegten Ordnung
void sort(Object[] a)
void sort(Object[] a, Comparator c)
 
// Stellt die Elemente eines eindimensionalen Arrays als String dar
String toString(Object[] a)
 
// Stellt die Elemente eines mehrdimensionalen Arrays als String dar
String deepToString(Object[] a)
 
// True, falls die Elemente von a1 gleich den Elementen von 
// a2 sind bzw. (bei Objekten) die Referenzen gleich sind
boolean equals(int[] a1, int[] a2)
 
// Wie oben, nur müssen die Elemente auf der tiefsten Ebene übereinstimmen
boolean deepEquals(Object[] a1, Object[] a2)

Flussdiagramme

FormBedeutung
RechteckOperation
RauteVerzweigung
Rechteck mit doppelten vertikalen LinienUnterprogramm
ParallelogrammEin-/Ausgabe
Pfeil / LinieVerbindung zum nächstfolgenden Element
OvalStart, Ende, Grenzpunkte