Hallo,
Ich habe ein Programm geschrieben, dass ein Datum, eine Zahl und den ersten Buchstaben eines Vornamens und den Nachnamen in einen Buchstabensalat verwandelt. Für Vor- und Nachname habe ich folgende Methode gebastelt. Die Bitfolgen in den if-bedingungen entsprechen Wegbeschreibungen eines binären Baums. Dabei sind die kürzesten Folgen die häufigsten Buchstaben der deutsch Sprache.
An diesen String hänge ich dann noch 5 Bit für den Tag, 4 Bit für den Monat, 4 für das Jahr (dem entsprechend is der Jahreszahlbereich ewas eingeschränkt) und noch zwei Bit für die erwähnte ominöse Zahl.
Nun möchte ich das ganze in 6 Bit lange Blöcke aufteilen, welche ich dann in dezimalzahlen wandle. Also Zahlen zwischen 0 und 63 Diese Zahlen nehme ich dann und ersetze sie durch Unicode Zeichen, hier 0-9, a-z, A-Z und noch ein paar andere, da ich mit dem Bereich ja nicht auf 64 mögliche Zeichen komme. Das wäre dann besagter Buchstabensalat.
Nun ist dem aufmerksamen Leser hier vielleicht schon aufgefallen, dass durch die unterschiedlichen Längen der Bitfolgen für die Buchstaben des Namen, der gesammte String sich nicht immer durch 6 teilen läst.
Zur Zeit pack ich an den Anfang einfach so viele Nullen, dass es passt. Soweit auch ok, allerdings möchte ich diesen Buchstabensalat auch wieder zurück wandeln:
Also die Zeichen in die entsprechenden dezimal Zahlen wandeln und diese wieder in binäre und schwupps hab ich wieder meinen binären String. Das Datum und die eine Zahl kann ich recht einfach zurück wandeln, da ich sie ja ganz hinten angehängt habe und die Anzahl der Bits kenne die sie darstellen.
Und nun kommt der Hacken:
Eigentlich kann ich ja meine Bitfolgen aus dem String wieder raus suchen und die entsprechenden Buchstaben ausgeben. Z.B. so:
und so weiter ... bis
Das klappt auch so,aber an dem oben gezeigten String *1 würde mein Programm jetz eigentlich noch 4 Nullen an den Anfang stellen um den gesammten String + Datum usw. durch 6 teilbar zu machen.
(Der String im Beispiel steht nur für Buchstaben, datum is also nich dabei)
Und genau hier ist der Knackpunkt. Wenn ich also vorne, oder auch hinten, 0en oder 1en anhänge bekomme ich unter Umständen nicht mehr den korrekten Namen raus.
Nun meine Frage an euch, liebe Leser:
Wie könnte ich den String sonst verlängern oder die Verlängerung als diese kenntlich machen? Hab mir schon den Kopf zerbrochen, aber mir will nix einfallen:autsch:
Gruß, Dax
Ich habe ein Programm geschrieben, dass ein Datum, eine Zahl und den ersten Buchstaben eines Vornamens und den Nachnamen in einen Buchstabensalat verwandelt. Für Vor- und Nachname habe ich folgende Methode gebastelt. Die Bitfolgen in den if-bedingungen entsprechen Wegbeschreibungen eines binären Baums. Dabei sind die kürzesten Folgen die häufigsten Buchstaben der deutsch Sprache.
Java:
private String Meth_A(String surname, String givenname){
//
String name=surname.charAt(0)+givenname;
//
name=name.toUpperCase();
name=name.replace('Ä','A');
name=name.replace('Ö','O');
name=name.replace('Ü','U');
String bc="";
//
for(int i=0;i<name.length();i++){
//3-Bits
if(name.charAt(i)=='E') bc=bc+"011";
//4-Bits
if(name.charAt(i)=='N') bc=bc+"1100";
if(name.charAt(i)=='I') bc=bc+"0000";
if(name.charAt(i)=='S') bc=bc+"0001";
if(name.charAt(i)=='T') bc=bc+"0100";
if(name.charAt(i)=='R') bc=bc+"1101";
if(name.charAt(i)=='A') bc=bc+"0011";
//5-Bits
if(name.charAt(i)=='Z') bc=bc+"00100";
if(name.charAt(i)=='O') bc=bc+"01010";
if(name.charAt(i)=='U') bc=bc+"01011";
if(name.charAt(i)=='M') bc=bc+"10100";
if(name.charAt(i)=='L') bc=bc+"10101";
if(name.charAt(i)=='G') bc=bc+"10110";
if(name.charAt(i)=='H') bc=bc+"10111";
if(name.charAt(i)=='C') bc=bc+"10000";
if(name.charAt(i)=='D') bc=bc+"10001";
//6-Bits
if(name.charAt(i)=='Y') bc=bc+"001010";
if(name.charAt(i)=='X') bc=bc+"001011";
if(name.charAt(i)=='K') bc=bc+"111000";
if(name.charAt(i)=='J') bc=bc+"111001";
if(name.charAt(i)=='B') bc=bc+"111010";
if(name.charAt(i)=='F') bc=bc+"111011";
if(name.charAt(i)=='W') bc=bc+"111100";
if(name.charAt(i)=='V') bc=bc+"111101";
if(name.charAt(i)=='Q') bc=bc+"111110";
if(name.charAt(i)=='P') bc=bc+"111111";
if(name.charAt(i)=='-') bc=bc+"100111";
}
return bc;
}???:L
An diesen String hänge ich dann noch 5 Bit für den Tag, 4 Bit für den Monat, 4 für das Jahr (dem entsprechend is der Jahreszahlbereich ewas eingeschränkt) und noch zwei Bit für die erwähnte ominöse Zahl.
Nun möchte ich das ganze in 6 Bit lange Blöcke aufteilen, welche ich dann in dezimalzahlen wandle. Also Zahlen zwischen 0 und 63 Diese Zahlen nehme ich dann und ersetze sie durch Unicode Zeichen, hier 0-9, a-z, A-Z und noch ein paar andere, da ich mit dem Bereich ja nicht auf 64 mögliche Zeichen komme. Das wäre dann besagter Buchstabensalat.
Nun ist dem aufmerksamen Leser hier vielleicht schon aufgefallen, dass durch die unterschiedlichen Längen der Bitfolgen für die Buchstaben des Namen, der gesammte String sich nicht immer durch 6 teilen läst.
Zur Zeit pack ich an den Anfang einfach so viele Nullen, dass es passt. Soweit auch ok, allerdings möchte ich diesen Buchstabensalat auch wieder zurück wandeln:
Also die Zeichen in die entsprechenden dezimal Zahlen wandeln und diese wieder in binäre und schwupps hab ich wieder meinen binären String. Das Datum und die eine Zahl kann ich recht einfach zurück wandeln, da ich sie ja ganz hinten angehängt habe und die Anzahl der Bits kenne die sie darstellen.
Und nun kommt der Hacken:
Eigentlich kann ich ja meine Bitfolgen aus dem String wieder raus suchen und die entsprechenden Buchstaben ausgeben. Z.B. so:
Java:
String key="111001111100011000101001011101010111011111011"; //*1
while(key.length()>2){
if(key.substring(0,6).equals("001010")){
key=key.substring(6);
System.out.println(" Y "+key);
}
else
if(key.substring(0,6).equals("001011")){
key=key.substring(6);
System.out.println(" X "+key);
}
else
und so weiter ... bis
Java:
if(key.substring(0,3).equals("011")){ key=key.substring(3); System.out.println(" E "+key);
}
else
break; }
Das klappt auch so,aber an dem oben gezeigten String *1 würde mein Programm jetz eigentlich noch 4 Nullen an den Anfang stellen um den gesammten String + Datum usw. durch 6 teilbar zu machen.
(Der String im Beispiel steht nur für Buchstaben, datum is also nich dabei)
Und genau hier ist der Knackpunkt. Wenn ich also vorne, oder auch hinten, 0en oder 1en anhänge bekomme ich unter Umständen nicht mehr den korrekten Namen raus.
Nun meine Frage an euch, liebe Leser:
Wie könnte ich den String sonst verlängern oder die Verlängerung als diese kenntlich machen? Hab mir schon den Kopf zerbrochen, aber mir will nix einfallen:autsch:
Gruß, Dax