weniger code für: caesar + reverse?

  • Themenstarter Themenstarter crypto1
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
C

crypto1

Gast
Hi, könnte man diese Methoden auch kürzer schreiben - Wenn ja, dann wie?

Danke ;-)

INFO:
reverse dreht den String 'text' um
caesar verschiebt den buchstaben im alphabet um 1ne stelle


Code:
public String reverse()
    {
        StringBuffer buf = new StringBuffer(text).reverse();
        return buf.toString();
    }
    
    public String caesar()
    {
        StringBuffer buf = new StringBuffer();
        for(int i = 0; i < text.length(); i++)
        {
            int z = (int)text.charAt(i);
            if(z >= 65 && z < 90 || z >= 97 && z < 122)
                buf.append((char)++z);
            else if(z == 122 || z == 90)
                buf.append((char)(z-25));
            else buf.append((char)z);
        }
        return buf.toString();
    }
 
Naja du kannst statt z >= 65 einfach z > 64 schreiben. Das geht "etwas" schneller... Aber sonst wüsste ich nicht, was man da noch kürzen könnte...
 
anstatt dem StringBuffer könnte man einen StringBuilder benutzen. Wäre das selbe, allerdings nicht sysnchronisiert. Wäre evtl etwas schneller.

Aus der for könnte man ein for-each machen.
Code:
for(char c : text.toCharArray()){...}

dann ists etwas kürzer

EDIT:
für die lesbarkeit:
Code:
if(z >= 'a' && z < 'z' || z >= 'A' && z <= 'Z')

gegen Magic Numbers im Code
 
Code:
if(z >= 'a' && z < 'z' || z >= 'A' && z <= 'Z')

z hat doch einen integer wert, was drückt man damit aus?
 
'a' ist gleich 65,
mit 'a' kannst du ganz normal rechen, quadrieren usw.,

nur wird vielleicht manchmal jemand wegen Zahlbereich meckern,
z.B. ist char * char = int und das kannst du dann ohne cast nicht wieder in einem char abspeichern
 
die sicherere variante wäre es, sich das gewünschte alphabet vorzuhalten und nur mit indizes zu rechnen.

Code:
String alphabet = "abc... usw... XYZ";
// ...
int index = alphabet.indexOf( sourceString.charAt( i ) );
char rot = alphabet.charAt( ( index + nRot ) % alphabet.length() );
 
Janus meinte mit "sicher" wohl nicht, dass man die Verschlüsselung nicht sehr einfach cracken könnte, sondern, dass das ganze dadurch austauschbarer, fehlerresistenter, plattformunabhängiger wird.(Wobei sich die JVM interne ASCII-Tabelle wohl kaum ändern wird).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben