Frage von JOSUE2000, 39

Matrix String entschlüsseln in java?

Hallo, Ich möchte einen String haben, der zeichen für zeichen entschlüsselt wird. Z.b. :

String unvollständig = "¶∆£$¶$∆£×%@€#";

Dann dem ersten Zeichen(¶) einen Buchstaben z.b. "a" zuweisen.

Dass alles bis zum ende des Wortes das ich entschlüsseln möchte(lenght() vllt.).

Jedoch soll dies alles im gleichen String passieren...nicht zeile unter zeile. Habt ihr vorschläge?

Expertenantwort
von TeeTier, Community-Experte für programmieren, 15

Also ich habe aus deinem Zeichensalat mal ein paar Regeln abgeleitet, und diese in einen regulären Ausdruck gepackt, welchen ich gegen eine Datenbank mit Deutschen und Englischen Wörtern getestet habe ...

Lange Rede, kurzer Sinn: Der einzige halbwegs sinnvolle Treffer war "ebenenbezüge", und das auch nur, wenn man Groß-/Kleinschreibung ignoriert, und den Umlaut mit zwei Zeichen als Unicode kodiert interpretiert. :)

Von daher würde ich fast schon wetten, dass es zu deiner Aufgabenstellung keine logische Lösung gibt, oder du einen Fehler in deinen Zeichensalat eingebaut hast.

"Ebenenbezüge" klingt nicht danach, ein gesuchtest Wort zu sein. Und selbst wenn ich Leerzeichen mit einbeziehe, kommen nur sinnlose Phrasen bei raus. :)

Trotzdem noch viel Spaß beim Knobeln! :)

PS: Für Interessierte, hier noch mal der Einzeiler, mit dem abgeleiteten RegEx (Achtung, Perl-Stil!):

grep -oiP '(\S)(..)(.)\1\3\2([^\1\2\3])([^\1\2\3\4])([^\1\2\3\4\5])([^\1\2\3\4\5\6])[^\1\2\3\4\5\6\7]' wordlist.utf8

Wesentlich sauberer wäre es natürlich mit einem Prolog-Skript, aber wir wollen mal nicht übertreiben. :)

Antwort
von holofoxx, 30

Hi JOSUE2000,

ich hoffe ich habe das richtig verstanden dass du eine Zeichenfolge mit vorgefertigten Buchstabenverbindungen entschlüsseln möchtest. 

Du kannst das einfach so machen, dass du für jeden Buchstaben im Alphabet ein Zeichen hast. Dann kannst du dir ein Dictionary anlegen mit den Zeichen und über das kannst du drüberiterieren. 

Die Buchstaben die dir dann zurückgegeben werden kannst du in eine Linked List anhängen und die dann ausgeben. 

Ich bin noch neu in Java drum weiß ich nicht ob die LinkedList die Lösung des Problems ist, aber ein Array solltest du ja nicht verwenden können für die Ausgabe weil es fix ist. Bin mir sicher es gibt auch noch andere Möglichkeiten eine Ausgabe in 1 Zeile zu gestalten. 

Wenn du willst kann ich dir meinen Python-Code für einen Morse-Encoder zukommen lassen. Das Prinzip ist genau das gleiche nur anders rum.

Grüße foxx

Kommentar von JOSUE2000 ,

Hallo holofoxx, bin auch relativ neu in java...ich würde gerne den Python code sehen Jona

Kommentar von holofoxx ,

Leider kann ich hier keine Dateien schicken. https://hackaday.io/project/11735-morse-code-translator
Das ist mein Hackaday Prijekt zum Übersetzer. Wenn ich mal lust habe werde ich nen Dekodierer auch noch schreiben und in eine Webumgebung einbinden.
Über ein Follow würde ich mich freuen :) auf Hackaday gibts sehr viele coole Projekte.

Antwort
von Fitje, 3

Das kommt auf die Art der Verschlüsselung an. Was dir momentan anscheinend durch den Kopf geht ist ein Ersatzalphabet, eine monoalphabetische Substitution. So etwas nennt man Substitution. Es gibt aber auch andere Methoden wie etwa die Transposition, gerade auf Bit-Ebene.  Den meisten Fehler begeht man dabei bei der Typumwandlung von unsigned zu signed. Bei C++ werden zum Beispiel die Zeichen aus einer Datei als signed char geliefert. So einfach mit den Cast-Operator würde ich das nicht machen.

Ebenso ist das ein Unterschied, ob die Zeichen als reines ASCII oder als EBCDIC gespeicher werden. Dann musst du auf die Vorzeichen-Bits achten. Denn dann verstecken sich hinter den Sonderzeichen eine Folge von zwei Bytes. Java ist ja sehr stark an C und c++ angelehnt.

Antwort
von JupStrunk, 21

Jedoch soll dies alles im gleichen String passieren...nicht zeile unter zeile.

keine Ahnung, was Du damit meinst... :D

es gibt hier sicherlich mehrere Ansatzmöglichkeiten...

ich würde wohl ein zweidimensionales Array aus chars erstellen, in dem ich jedem "Zeichen" einen Buchstaben zuweise...
dann durch den String, Zeichen für Zeichen, gehen und das jeweilige Zeichen im Array suchen...
den entsprechenden Buchstaben zum Zeichen würde ich dann an einen neuen String anhängen...

Keine passende Antwort gefunden?

Fragen Sie die Community