/**
   * Erstellt ein neues Alphabet, das aus einem String und einem umgedrehten Alphabet besteht.
   *
   * @param key der String
   * @param alphabet das Alphabet
   * @return ein neues Alphabet
   */
  public static Alphabet fillAlphabet(String key, Alphabet alphabet) {
    int AlphabetZahler = 0; // Erstellt einen Zähler.
    char[] keyArray = key.toCharArray(); // Wandelt den String in ein char Array um.
    char[] ergebnis = new char[alphabet.size()]; // Erstellt ein zweites Array vom Typ char.
    Utils test = new UtilsClass(); // Erstellt ein Objekt vom Typ Utils.
    boolean found = false; // Erstellt ein Boolean und initialisiert den Boolean mit false.

    if (alphabet.size() + key.length() < alphabet.size()) {
      throw new IllegalArgumentException(
          "Das neue Alphabet würde weniger Zeichen beinhalten, als das vorherige");
    }

    for (int i = 0; i < key.length(); i++) {
      ergebnis[i] = keyArray[i]; // Das Array "ergebnis" wird mit dem String befüllt.
      AlphabetZahler += 1; // Der Zähler wird um 1 erhöht.
    }
    for (int i = 0; AlphabetZahler < alphabet.size(); i++) {
      for (int k = 0;
          k < ergebnis.length;
          k++) { // Überprüfen ob der Buchstabe aus dem Alphabet schon in dem Array vorhanden
        if (ergebnis[k] == test.reverseAlphabet(alphabet).getChar(i)) { // ist.
          found = true; // Der Boolean wird auf true gesetzt.
        }
      }
      if (found == false) { // Wenn der Buchstabe nicht vorhanden ist:
        ergebnis[AlphabetZahler] =
            test.reverseAlphabet(alphabet)
                .getChar(
                    i); // Der Rest von dem Array "ergebnis" wird mit Buchstaben aus dem Alphabet
                        // befüllt.
        AlphabetZahler += 1; // Der Zähler wird um 1 erhöht.
      }
      found = false;
    }

    Map<Integer, Character> alphabetmap =
        new HashMap<Integer, Character>(); // Erstellen einer neuen Map (leer)
    for (int i = 0;
        i < alphabet.size();
        i++) { // Alle Elemente aus dem Array "ergebnis" werden in der Map eingefügt.
      alphabetmap.put(i, ergebnis[i]);
    }

    Alphabet KeywordAlphabet =
        new AlphabetClass(
            alphabetmap.values()); // alphabetmap.values() gibt Collection<Character> zuürck
    return KeywordAlphabet;
  }
  /**
   * Erstellt aus einem Schluesselword und einem Klartext Alphabet das Verschluesselungs Alphabet.
   *
   * @param keyWord Das Schluesselwort
   * @param a Das Klartext Alphabet
   * @return Das Verschluesselungs Alphabet.
   */
  private static Alphabet createDestAlphabet(String keyWord, Alphabet a) {
    char[] array = keyWord.toCharArray();

    ArrayList<Character> list = new ArrayList<Character>();

    for (char c : array) {
      list.add(c);
    }

    Utils util = new UtilsImpl();

    Alphabet reversedAlphabet = util.reverseAlphabet(a);

    for (Character c : reversedAlphabet) {

      if (!list.contains(c)) list.add(c);
    }

    return new AlphabetImpl(list.subList(0, a.size()));
  }