import utilities.TastaturEingabe;

/**
Kinderlied "Drei Chinesen mit dem Kontrabass"
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 DreiChinesen
{
   private String lied;

   DreiChinesen()
   {
      lied= "Drei Chinesen mit dem Kontrabass\n"+
            "sassen auf der Strasse und erzaehlten sich was.\n"+
            "Da kam die Polizei: \"Ei was ist denn das?\"\n"+
            "Drei Chinesen mit dem Kontrabass.\n";
   }

   DreiChinesen(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)
   {
      DreiChinesen lied = new DreiChinesen();
      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:");
      DreiChinesen eigen = new DreiChinesen(text);
      System.out.println();
      Vokal = eigen.VokalEinlesen();
      System.out.println("Das geaenderte Lied singen:");
      System.out.println();
      System.out.println(eigen.singe(Vokal));
   }
}

