Verschlüsselung

chk1102

Aktives Mitglied
Hallo Zusammen,

ich bearbeite aktuell ein Programm mit dem ich Strings nach der Eingabe verändern soll.
Meine Letzte Übung ist nach dem Einlesen eines Strings die Zeichen ab jeder 2. Stelle in ein anderen String zu schreiben und auszugeben.
Ich habe die Methode mal begonnen, weil sich ein String to Char nicht casten lässt gehts leider noch nicht.
Nur wie kann ich das einfach umsetzen?
Ziel: Hund Katze Maus
in
Hn az asudKteMu



Java:
package Proggen1_2;

public class P06_1_Stringverarbeitung {

	/**
	 * @param args
	 */
	
	public static void  Geheim (String s) {
		String t = "";
		for ( int i = 1; i<s.length(); i++) {
			t = s.charAt(i+1);
		}
                 String neu = (String) t;

	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub

	
		System.out.println("Bitte gib einen Text ein");
		String s = EAM.rString();
		System.out.println("Bitte gib einen Buchstaben ein, der gezählt werden soll");
		char buchstabe = (char) EAM.rChar();
					Geheim(s);
					
	}

}
 
Willst du die Buchstaben wild durcheinanderwürfeln oder was genau ist das Ziel? Ich sehe nämlich keinen Zusammenhang zwischen "Hund Katze Maus" und "Hn az asudKteMu", außer dass bei 2. die Buchstaben ungeordnet sind.
 
Java:
public static String geheim(String s) {
	StringBuilder geheim = new StringBuilder();
	for( int i = 0; i < s.length(); i++ )
		geheim.append( s.charAt( i * 2 % s.length() ) );
	return geheim.toString();
}
 
Append bedeutet anhängen.
Der Code macht das gleiche wie
Java:
public static String geheim(String s) {
    String geheim = "";
    for( int i = 0; i < s.length(); i++ )
        geheim += s.charAt( i * 2 % s.length() );
    return geheim;
}

StringBuilder ist aber viel schneller, da bei diesem Code bei jedem Schleifendurchlauf ein neuer StringBuilder erzeugt wird.
 
Tut mir leid, es muss heißen "beim Code mit
Code:
s+= "xyz";
wird jedes Mal ein neuer StringBuilder erzeugt"

Übrigens klappt mein vorgeschlagener Code nur bei einer ungeraden Länge.

Damits auch für ne gerade Stringlänge klappt, müsstest du den Code hier nehmen:
Java:
public static String geheim(final String s) {
	final StringBuilder geheim = new StringBuilder();
	if( s.length() % 2 == 0 )
		for( int i = 0; i < s.length(); i++ ) {
			int index = i * 2;
			if( index >= s.length() )
				index++;
			geheim.append( s.charAt( index % s.length() ) );
		}
	else
		for( int i = 0; i < s.length(); i++ )
			geheim.append( s.charAt( i * 2 % s.length() ) );
	return geheim.toString();
}

Damit klappt's, ich weiß nicht, ob es noch kürzer geht.
 

Zurück
Oben