import utilities.TastaturEingabe;

/**
Alle Vokale durch EINEN bestimmten Vokal ersetzen
Umlaute werden nicht beruecksichtigt.

Das Programm fordert nach der Ausgabe des Originaltextes
zur Eingabe eines Vokals auf, der alle anderen Vokale des
Textes ersetzen soll. Die Methode VokalEinlesen() fragt solange
nach, bis wirklich ein Vokal eingegeben wird.
Das zu singende Lied mit den ersetzten Vokalen wird auf dem
Bildschirm angezeigt; dabei sollen grosse Vokale wieder als Grossbuchstaben erscheinen.
In der Methode singe() wird dies durch die Methode istGross()
beruecksichtigt.

Umwandlung Kleinbuchstabe ch -> Grossbuchstabe: ch + 'A' - 'a'
*/
/*------------------------------------------------------------------*/


public class DreiSaarlaender
{
   private String lied;

   DreiSaarlaender()
   {
      lied= "Drei Saarlaender mit einem Kasten Urpils\n"+
            "sassen auf einer Bank und erzaehlten sich was.\n"+
            "Da kam die Polizei: \"Ei was ist denn das?\"\n"+
            "Drei Saarlaender mit einem Kasten Urpils.\n";
   }

   DreiSaarlaender(String s)
   {  lied = s; }

   /**
   * Bestimmt, ob eingegebenes Zeichen Vokal ist.
   * @param c Zeichen
   * @return ist zeichen ein Vokal?
   */
   private boolean istVokal(char c)
   {
      c = Character.toLowerCase(c);    // c ist jetzt Kleinbuchstabe
      return (c=='a')||(c=='e')||(c=='i')||(c=='o')||(c=='u');
   }

   /**
   *  So lange einlesen, bis Vokal eingegeben wurde.
   *  @return eingelesener Vokal als Kleinbuchstabe!!!
   */
   public char VokalEinlesen()
   {
      char c;
      do
      {
         c = TastaturEingabe.readChar("Geben Sie einen Vokal ein: ");
      } while (!istVokal(c));
      c = Character.toLowerCase(c);    // c ist jetzt Kleinbuchstabe
      return c;
   }

   /**
   *  ersetzt Vokale im Text durch angegebenen Vokal
   *  @param Vokal Ersatzvokal
   */
   public String singe(char vokal)
   {
      // Hilfsvariable liedHilf vom Typ StringBuffer anlegen
      // und mit lied initialisieren
      StringBuffer liedHilf = new StringBuffer(lied);

      // alle Buchstaben von liedHilf betrachten
      for (int i = 0; i < liedHilf.length(); i++)
      {
         char c = liedHilf.charAt(i);

         // falls aktueller Buchstabe Vokal ist,
         // diesen durch den eingelesenen Vokal ersetzen
         if (istVokal(c))
            // Grossbuchstaben beruecksichtigen
            if (Character.isUpperCase(c))
               liedHilf.setCharAt(i, Character.toUpperCase(vokal));
            else
               liedHilf.setCharAt(i, vokal);
      }
      return liedHilf.toString();
   }

   public static void main(String[] argv)
   {
      DreiSaarlaender lied = new DreiSaarlaender();
      System.out.println("Umwandlung des Liedes:");
      System.out.println(lied.lied);
      System.out.println();
      char Vokal = lied.VokalEinlesen();
      System.out.println("Das geaenderte Lied singen:");
      System.out.println();
      System.out.println(lied.singe(Vokal));

      String text = TastaturEingabe.readString("Geben Sie ein Lied ein:");
      DreiSaarlaender eigen = new DreiSaarlaender(text);
      System.out.println();
      Vokal = eigen.VokalEinlesen();
      System.out.println("Das geaenderte Lied singen:");
      System.out.println();
      System.out.println(eigen.singe(Vokal));
   }
}

