/*
* Autor: André Reichert-Creutz (Mat Nr 2013915)
* Version 0.1 vom 28.09.2022 -> Teilaufgaben 1a und 1b fertig
* Version 0.2 vom 02.10.2022 -> Teilaufgabe 1c fertig
* Version 0.3 vom 09.10.2022 -> Teilaufgabe 1d, 1e und 1f fertig
* Version 1.0 vom 14.10.2022 -> Teilaufgabe 1g fertig und formatiert
*/
public class anzahlVokale {
public static void main(String[] args) throws java.lang.Exception{
// Ab hier: int anzahlVokale (String s); und int letzteVokalPosition (String s); und String ohneVokale (String s);
StringBuilder s = new StringBuilder("Aua, Hoch auf dem Gelben Wägelchen "); // Dieser String wird untersucht
int anzahlVokale = 0; // Definiert die Variable zur Ausgabe der Anzahl der Vokale und setzt auf Null
int alleA = 0; // Definiert die Variable zur Ermittlung der Menge an aA und setzt auf Null -> wird nur zum Testen benötigt
int alleE = 0;
int alleI = 0;
int alleO = 0;
int alleU = 0;
int alleÄ = 0;
int alleÖ = 0;
int alleÜ = 0;
int lastA = 0; // Wird für die Ermittlung der Position aA benötigt und setzt auf Null
int lastE = 0;
int lastI = 0;
int lastO = 0;
int lastU = 0;
int lastÄ = 0;
int lastÖ = 0;
int lastÜ = 0;
// Anmerkung: Hier mit einer if - else Schleife gelöst -> so kann ich zwei Teilaufgaben zusammen lösen
for(int j = 0; j < s.length(); j++)
{
if(s.charAt(j) == 'a' || s.charAt(j) == 'A') { // Frage: ist das Zeichen ein a oder A
lastA = j; // wenn JA, merke die Position in "lastA" -> wird bei jeder Iteration überschrieben
anzahlVokale++; // wenn JA, erhöhe die Variable "anzahlVokale" um 1
alleA++; // wenn JA, erhöhe die Variable "a" um 1 (zum Testen)
lastA++; // brauchen wir, da bei 0 begonnen wird, wir aber die Position der letzten Variable fehlerfrei ausgeben wollen
}
else if(s.charAt(j) == 'e' || s.charAt(j) == 'E') {
lastE = j;
anzahlVokale++;
alleE++;
lastE++;
}
else if(s.charAt(j) == 'i' || s.charAt(j) == 'I') {
lastI = j;
anzahlVokale++;
alleI++;
lastI++;
}
else if(s.charAt(j) == 'o' || s.charAt(j) == 'O') {
lastO = j;
anzahlVokale++;
alleO++;
lastO++;
}
else if(s.charAt(j) == 'u' || s.charAt(j) == 'U') {
lastU = j;
anzahlVokale++;
alleU++;
lastU++;
}
else if(s.charAt(j) == 'ä' || s.charAt(j) == 'Ä') {
lastÄ = j;
anzahlVokale++;
alleÄ++;
lastÄ++;
}
else if(s.charAt(j) == 'ö' || s.charAt(j) == 'Ö') {
lastÖ = j;
anzahlVokale++;
alleÖ++;
lastÖ++;
}
else if(s.charAt(j) == 'ü' || s.charAt(j) == 'Ü') {
lastÜ = j;
anzahlVokale++;
alleÜ++;
lastÜ++;
}
}
// Ausgabe Anzahl Vokabeln
System.out.println("Es wird auf Vokale geprüft: " );
System.out.println(" String: " +s);
System.out.println(" Anzahl Vokale Gesamt: " + anzahlVokale); // Ergebnis
//Die Nächste Zeile dient zur Kontrolle: Ausgabe der Teilergebnisse
//System.out.println("Kontrolle: \nA+a= " + lastA + "\n" + "E+e= " + alleE + "\n" + "I+i= " + alleI + "\n" + "O+o= " + alleO + "\n" + "U+u= " + alleU + "\n" + "Ä+ä= " + alleÄ + "\n" + "Ö+ö= " + alleÖ + "\n" + "Ü+ü= " + alleÜ + "\n");
// Ermittelt die Position des letzten Vokals unabhängig von Groß- /Kleinschreibung innerhalb der Zeichenkette s
int[] array = { lastA, lastE, lastI, lastO, lastU, lastÄ, lastÖ, lastÜ } ;
int letzteVokalPosition = 0; // Definiert die Variable für die letzte Vokalposition und setzt auf Null
letzteVokalPosition = array[0]; // das gegenwärtige Maximum initialisieren
for ( int index = 0; index < array.length; index++ ) // das Array durchsuchen
{
if ( array[ index ] > letzteVokalPosition ) // das gegenwärtige Element untersuchen
letzteVokalPosition = array[ index ]; // wenn es bis dahin das Größte ist, max ändern
}
System.out.println(" Der letzte Vokal ist an Position: " + letzteVokalPosition + " (inklusive Leerzeichen)"); //Ergebnis Position
//Nächste Zeile dient zur Kontrolle: Ausgabe der Teilergebnisse
//System.out.println("Last A = " + lastA + "\n" + "Last E = " + lastE + "\n" + "Last I = " + lastI + "\n" + "Last O = " + lastO + "\n" + "Last U = " + lastU + "\n" + "Last Ä = " + lastÄ + "\n" + "Last Ö = " + lastÖ + "\n" + "Last Ü = " + lastÜ );
//Ab hier: Zeichenkette ohneVokale (String s)
//Anmerkung: AEIOU = Vokale -> ÄÖÜ = Umlaute, also keine Vokale
//Anmerkung: hier habe ich die , wie ich finde, elegantere while-Schleife verwendet und zur besseren Lesbarkeit auf || (für oder) verzichtet
StringBuilder ohneVokale = s;
int k = 0;
while ((k=ohneVokale.indexOf("a")) > -1) s.deleteCharAt(k); //kommt ein a vor, dann lösche es
while ((k=ohneVokale.indexOf("A")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("e")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("E")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("i")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("I")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("o")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("O")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("u")) > -1) s.deleteCharAt(k);
while ((k=ohneVokale.indexOf("U")) > -1) s.deleteCharAt(k);
System.out.println(" Der String ohne Vokale: " + ohneVokale); // Ausgabe: Zeichenkette ohne Vokale
System.out.println(" "); //Eyecandy
// Ab hier: String mischen (String a, String b)
System.out.println("Wir mischen zwei Zechenketten:");
String a = ("ABC"); // Zeichenketta "a" wird gebildet
String b = ("abcd"); // Zeichenketta "b" wird gebildet
System.out.println(" String a = " + a); // Ausgabe String a
System.out.println(" String b = " + b); // Ausgabe String b
StringBuilder mixResult = new StringBuilder(a);
for (int i = 0; i < b.length(); i++) {
mixResult.insert(Math.min(i * 2 + 1, mixResult.length()),
b.charAt(i)); }
System.out.println(" Der gemischte String: " + mixResult.toString());
System.out.println(" "); //Eyecandy
// Ab hier: String wiederhole
System.out.println("Einen String wiederholen: ");
int l = 3; // wie oft soll wiederholt werden
String str = "Blub"; // Zeichenkette "str" wird gebildet
System.out.println(" Der String ist: " + str); // Ausgabe String str
String newStr = new String(new char[l]).replace("\0", str); // String wird "L" mal wiederholt und nach newStr geschrieben
System.out.println(" " + l + " mal wiederholt: " + newStr); // Ausgabe Ergebnis
System.out.println(" "); //Eyecandy
// Ab hier: int stringInString
System.out.println("String im String suchen:");
String worin = ("abcABCabcABC"); // Worin soll gesucht werden
String suche = ("ABC"); // Was soll gesucht werden
System.out.println(" Der String ist: " + worin);
if (worin.contains(suche)) { // wenn gefunden, gib Ergebnisse aus
System.out.println(" Wir suchen das erste: " + suche);
int stringInString = worin.indexOf(suche);
System.out.println(" Das Funktionsergebnis ist: " + stringInString);
stringInString++; // damit die lesber richtige Stelle im Ergebnis steht
System.out.println(" Ab der Stelle " + stringInString + " im String wurde zum ersten Mal " + suche + " gefunden");
System.out.println(" Wir suchen der letzte: " + suche);
int stringInStringRev = worin.lastIndexOf(suche);
System.out.println(" Das Funktionsergebnis ist: " + stringInStringRev);
stringInStringRev++;
System.out.println(" Ab der Stelle " + stringInStringRev + " tritt " + suche + " das letzte Mal auf");
}
else {
System.out.println(" Leider nichts gefunden"); // nix gefunden - nix melden
}
}
}
// Ende
Die Ausgabe
Es wird auf Vokale geprüft:
String: Aua, Hoch auf dem Gelben Wägelchen
Anzahl Vokale Gesamt: 12
Der letzte Vokal ist an Position: 33 (inklusive Leerzeichen)
Der String ohne Vokale: , Hch f dm Glbn Wäglchn
Wir mischen zwei Zechenketten:
String a = ABC
String b = abcd
Der gemischte String: AaBbCcd
Einen String wiederholen:
Der String ist: Blub
3 mal wiederholt: BlubBlubBlub
String im String suchen:
Der String ist: abcABCabcABC
Wir suchen das erste: ABC
Das Funktionsergebnis ist: 3
Ab der Stelle 4 im String wurde zum ersten Mal ABC gefunden
Wir suchen der letzte: ABC
Das Funktionsergebnis ist: 9
Ab der Stelle 10 tritt ABC das letzte Mal auf