Codieren/decodieren von long in einen string mit einem festen Satz von Buchstaben in Java
Gegeben eine beliebige Reihe von Buchstaben
String range = "0123456789abcdefghijklmnopABCD#";
Ich bin auf der Suche nach 2 Methoden zum codieren/decodieren von langen <-> String
String s = encode( range, l );
und
long l = decode( range, s );
So decode(range, encode(range, 123456789L)) == 123456789L
Und wenn Bereich ist "0123456789" das ist die übliche Art der Codierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende code tut, was Sie brauchen:
Beachten Sie, dass dies ist im wesentlichen Basis-Konvertierung mit einer Reihe von benutzerdefinierten Symbolen.
Fragen
Dies ist einfach eine Frage der Durchführung von Basis-Konvertierung. Einfach konvertieren Sie die lange, um die entsprechende numerische Basis, entsprechend der Anzahl der Zeichen in der Zeichenfolge und die Zeichenfolge als Ihre "Ziffern".
Angenommen, Sie haben den string "0123456789ABCDEF", dann bedeutet dies, dass Sie konvertieren müssen, zur Basis 16, hexadezimal. Wenn der string ist "01234567", dann wandeln Sie zur Basis 8, oktal.
Zurück, nehmen die erste Rolle, seine position in der Zeichenfolge, und fügen Sie es auf das Ergebnis. Dann, für alle nachfolgenden Zeichen, multiplizieren Sie die aktuelle Folge von der base vor dem hinzufügen der position des nächsten Zeichens.
suchen Patten und matcher. Hier ist mein snippet
private static final String LUCENE_ENCODE_ESCAPE_CHARS = "[\\+\-\!\(\)\:\^\]\{\}\~\*\?]";