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.