Mehrere Buchstaben durch unterschiedliche ersetzen

Hallo,

ich wollte das ein Wort,
wie z.B.: “HANS”
zu “BHTZ”
geändert wird (Also ne Verschlüsslung).
Ich weiß leider nur nicht wie ich es hinbekomme ohne 3000 neue Strings zu erstellen in die ich das auslagere.
Hier ein Programm Fetzen:

Inhalt = eins.getText();
Inhalt2 = Inhalt.replace("A", "2");

Mit freundlichem Gruß,
MrSmile07

Naja du kannst z.B. einfach ein Array erstellen das dann folgend interpretiert werden muss. an index Position 0 steht der Buchstabe der fuer das A eingesetzt wird an index Position 1 der fuer B und so weiter. dann muss du nur mit einer Schleife ueber das Array iterrieren.

Such mal nach Rot13.

@AmunRa kannst du mal ein Beispiel posten?
@MZ80A habe ich gemacht, nützt mir aber nichts, möchte ja selbst bestimmen wo durch der Buchstabe ersetzt wird. :smiley:

Mit freundlichem Gruß,
MrSmile07

		char[] key =new char[]{'q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m'};

		String test = "ICH GEHE SCHLAFEN";

		for (int i=0;i<key.length;i++){
			test = test.replace((char)('A'+i),key**);
		}

		System.out.println(test);

Ein rieses Danke an @AmunRa . Ich werde das zwar noch umkonfigurieren habe aber den Aufbau (teilweise) verstanden.

Damit sezte ich das Thema auf “gelöst”.

Mit freundlichem Gruß,
MrSmile07

Wenn ich das richtig sehe, erzeugt AmunRas Lösung aber immer noch so viele Strings, wie die Kodierung Zeichen hat. Willst du das vermeiden, dann musst du den Eingabestring in ein Chararray wandeln, das kodieren, und das Ergebnis zurück in einen String wandeln.

Außerdem müssten die Ersetzungen Unsinn anstellen, wenn im Ausgangsstring auch kleine Buchstaben vorkommen.

Kompliziert, aber nicht unmachbar:

 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javaapplication1;

import java.security.SecureRandom;
import java.util.Arrays;
import java.util.Comparator;

/**
 * @author CB
 */
public class EinfacheVerschl {

    private static final char[][] CAA = new char['Z' - 'A' + 1 + 'z' - 'a' + 1][2];

    static {
        int i = 0; // oder mit { und } umgeben
        for (char c = 'A'; c <= 'Z'; c++, i++) {
            CAA**[0] = c;
            CAA**[1] = c;
        }
        for (char c = 'a'; c <= 'z'; c++, i++) {
            CAA**[0] = c;
            CAA**[1] = c;
        }
        Arrays.sort(CAA, new Comparator<char[]>() {
            @Override
            public int compare(char[] ca1, char[] ca2) {
                return Character.valueOf(ca1[0]).compareTo(ca2[0]);
            }
        });
        SecureRandom random2 = new SecureRandom();
        SecureRandom random1 = new SecureRandom(random2.generateSeed(20));
        for (int j = 0; j < CAA.length; j++) {
            int k = random1.nextInt(CAA.length);
            char tmp = CAA[j][1];
            CAA[j][1] = CAA[k][1];
            CAA[k][1] = tmp;
        }
        for (char[] ca : CAA) {
            System.out.println(Arrays.toString(ca));
        }
    }

    public static String verschl(String str) { // oder private
        StringBuilder sb = new StringBuilder();
        for (char c : str.toCharArray()) {
            int idx = Arrays.binarySearch(CAA, c, new Comparator<Object>() {
                @Override
                public int compare(Object o1, Object o2) {
                    return Character.valueOf(((char[]) o1)[0]).compareTo((Character) o2);
                }
            });
            if (idx < 0) {
                sb.append(c);
            } else {
                sb.append(CAA[idx][1]);
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(verschl("0123zHansZ3210"));
    }
}```


Ausgabe:
[spoiler]

run:
[A, H]
[B, i]
[C, T]
[D, v]
[E, q]
[F, C]
[G, Q]
[H, N]
[I, M]
[J, V]
[K, n]
[L, A]
[M, m]
[N, c]
[O, U]
[P, J]
[Q, a]
[R, B]
[S, b]
[T, x]
[U, P]
[V, K]
[W, E]
[X, G]
[Y, t]
[Z, R]
[a, j]
[b, g]
[c, I]
[d, O]
[e, Y]
[f, o]
[g, u]
[h, f]
[i, Z]
[j, X]
[k, D]
[l, k]
[m, F]
[n, w]
[o, h]
[p, p]
[q, r]
[r, l]
[s, z]
[t, y]
[u, W]
[v, L]
[w, S]
[x, e]
[y, s]
[z, d]
0123dNjwzR3210
BUILD SUCCESSFUL (total time: 0 seconds)

[/spoiler]


Arrays bietet keine shuffle-Methode an, die Verfahrensweise ist kompliziert, man müsste aus dem Array eine Liste machen, diese mit der shuffle-Methode mischen und aus der Liste wieder ein Array.

Ich habe mich für ein zweidimensionales Array entschieden, wahrscheinlich wäre besser eine HashMap (in die vorher gemischte Werte [nicht Schlüssel] eingefügt wurden). Oder aber `new char[2]['Z' - 'A' + 1 + 'z' - 'a' + 1];`.

Vielleicht kann Zeile 50 bis 53 jemand verbessern.

Je länger der nur in einer Sprache geschriebene/verfasste Text ist, desto unsicherer wird das Verfahren obige.

Ja, sowas wie

static String encode(String input, int n)
{
    StringBuilder sb = new StringBuilder();
    for (int i=0; i<input.length(); i++)
    {
        char c = input.charAt(i);
        sb.append((char)(c+n));
    }
    return sb.toString();
}

könnte ja nah an dem sein, was du suchst…

Nein, da das n fest ist, nicht frei wählbar.