Tina: Buchstaben austauschen

Hallo,
hätte gern gewusst, wie ich mit der replace-Funktion bei einer Texteingabe mehrere Buchstaben austauschen kann, z.b. wenn jemand Wand, Quark, Leiste eingibt, das W durch D, das Q durch N, das L durch M ersetze.
Vielen Dank im Voraus,

mit freundlichem Gruss
 Tina

  1. Hallo Tina,

    die Dokumentation zu String.replace() hast Du siocherleich gelesen. Dort ist ein Beispiel, wo das Wort Hinz ersetzt wird. Es ist unerheblich, ob DU nur ein Zeichen oder mehrere Zeichen tauschen möchtest - das Prinzip bleibt gleich. Sind mehrere Einzelzeichen zu ersetzen, so wie bei Dir, dann ist die replace()-Methode mehrfach anzuwenden; entweder in einer Schleife oder direkt verketten:

    str = str.replace(/W/g,"D").replace(/Q/g,"N");

    Mit freundlichem Gruß
    Micha

    1. Hi,

      Es ist unerheblich, ob DU nur ein Zeichen oder mehrere Zeichen tauschen möchtest

      nein, ist es nicht. Wenn man "A" durch "B" und "B" durch "C" ersetzen möchte, würde man bei Deinem Verfahren "A" und "B" durch "C" ersetzen. Falls Du jetzt mit der Reihenfolge spielen möchtest: Zeige mir bitte eine Lösung nach diesem Prinzip, welches alle 26 Buchstaben des Alphabets durch je einen anderen ersetzt und dabei reversibel bleibt.

      Tina: Der einfachste Weg ist es, den String buchstabenweise zu durchlaufen und die Ersetzung aus einem zuvor definierten Objekt herauszulesen.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
      1. Hallo Cheatah,

        Es ist unerheblich, ob DU nur ein Zeichen oder mehrere Zeichen tauschen möchtest

        nein, ist es nicht.

        In meinem angedachten Kontext ist es egal. Lies: Es spielt bei der Verwendung von replace() erst einmal keine Rolle, ob ich foo durch bar oder lediglich f durch b ersetzen möchte.

        Zeige mir bitte eine Lösung nach diesem Prinzip, welches alle 26 Buchstaben des Alphabets durch je einen anderen ersetzt und dabei reversibel bleibt.

        Dies wird selbstverständlich nur gelingen, wenn ein 27. Zeichen definiert wird und die Tauschreihenfolge vorgegeben wird, um den Prozess umzudrehen.

        Ansonsten könnte der gesamte String in ein Char-Array zerlegt werden und mit einer boolischen Variablen verknüpft werden, die angibt, ob der Buchstabe bereits getauscht wurde. Diese und andere Ideen werden wohl in Deinem Vorschlag münden.

        Da ich nur drei Vertauschungen im Eingangsposting sehe, die auf das von Dir hingewiesene Problem nicht passen, sah ich keinen Grund zur Sorge :-)

        Mit freundlichem Gruß
        Micha

        1. Hi,

          Es ist unerheblich, ob DU nur ein Zeichen oder mehrere Zeichen tauschen möchtest
          nein, ist es nicht.
          In meinem angedachten Kontext ist es egal.

          das mag sein, allerdings hat Dein angedachter Kontext dann nur wenig mit der Frage zu tun.

          Zeige mir bitte eine Lösung nach diesem Prinzip, welches alle 26 Buchstaben des Alphabets durch je einen anderen ersetzt und dabei reversibel bleibt.
          Dies wird selbstverständlich nur gelingen, wenn ein 27. Zeichen definiert wird

          Wer garantiert, dass dieses Zeichen nicht bereits vorkommt?

          Ansonsten könnte der gesamte String in ein Char-Array zerlegt werden

          Unnötig, das ist ein String in JavaScript nämlich schon.

          und mit einer boolischen Variablen verknüpft werden, die angibt, ob der Buchstabe bereits getauscht wurde.

          Unnötig, Schleifen existieren.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
          1. Ach Cheatah,

            das mag sein, allerdings hat Dein angedachter Kontext dann nur wenig mit der Frage zu tun.

            Die Frage ist/war; wie kann ich mit replace einzelne Buchstaben druch andere ersetzen? Aus dem Beispiel geht nicht hervor, dass es zu Kollisionen kommen kann. Ich verwies auf die Doku und schrieb lediglich dazu, dass es, wie dort gezeigt, auch für einzelne Zeichen gilt - nicht mehr.

            Dies wird selbstverständlich nur gelingen, wenn ein 27. Zeichen definiert wird

            Wer garantiert, dass dieses Zeichen nicht bereits vorkommt?

            In dem Fall Du, da Du den Wertebereich auf 26 Zeichen (das Alphabet) bereits begrenzt hast und ich ein anderes - lies: nicht in den 26 Zeichen vorkommendes Zeichen - einführe.

            So, nun schau bitte noch einmal in Deinen Schuh, ob Du heute früh etwas übersehen hast, was nun drückt. Für die Ausgangsfrage:

            das W durch D, das Q durch N, das L durch M

            sehe ich im Moment kein Anlaß hier etwas zu vertiefen.

            Mit freundlichem Gruß
            Micha

            1. Hi,

              das mag sein, allerdings hat Dein angedachter Kontext dann nur wenig mit der Frage zu tun.
              Die Frage ist/war; wie kann ich mit replace einzelne Buchstaben druch andere ersetzen? Aus dem Beispiel geht nicht hervor, dass es zu Kollisionen kommen kann.

              und Du denkst nicht weiter als der Fragesteller? Dann bist Du ein schlechter Antworter.

              Wer garantiert, dass dieses Zeichen nicht bereits vorkommt?
              In dem Fall Du, da Du den Wertebereich auf 26 Zeichen (das Alphabet) bereits begrenzt hast

              Ich habe nirgendwo einen Wertebereich eingegrenzt. Es sollen 26 Zeichen durch andere ersetzen - die Ersetzung enthält die selben Werte wie die zu ersetzenden Zeichen, aber niemand hat gesagt, dass im ursprünglichen String nichts anderes vorkommt.

              und ich ein anderes - lies: nicht in den 26 Zeichen vorkommendes Zeichen - einführe.

              Nicht in den 26 zu ersetzenden Zeichen, aber in den im String möglichen Zeichen.

              So, nun schau bitte noch einmal in Deinen Schuh, ob Du heute früh etwas übersehen hast, was nun drückt.

              Gerne. Im Gegenzug könntest Du mal auf die Suche gehen, ob Du irgendwo Dein Hirn hast liegen lassen.

              Für die Ausgangsfrage:

              [...]

              sehe ich im Moment kein Anlaß hier etwas zu vertiefen.

              Ich auch nicht, da mittlerweile die Probleme Deines Lösungsvorschlages klar sein sollten und ein alternativer, diesbezüglich problemfreier Vorschlag vorliegt.

              Cheatah

              --
              X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
              X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
              X-Will-Answer-Email: No
              X-Please-Search-Archive-First: Absolutely Yes
              1. Hallo Cheatah,

                und Du denkst nicht weiter als der Fragesteller? Dann bist Du ein schlechter Antworter.

                Es ist nachdem Prinzip "nicht so genau wie möglich, sondern so genau wie nötig" beantwortet.

                aber niemand hat gesagt, dass im ursprünglichen String nichts anderes vorkommt.

                Okay, das hatte ich mißverstanden.

                Gerne. Im Gegenzug könntest Du mal auf die Suche gehen, ob Du irgendwo Dein Hirn hast liegen lassen.

                ich geb Dir hierfür ein "fachlich hilfreich" ;-)

                Mit freundlichem Gruß
                Micha