/*
 * 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