Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
mir ist keine vordefinierte Methode bekannt.... müsstest du dann selber schreiben..
Einfachsten -> durch den String laufen und zählen wie oft was vorkommt - wenn ein neues zeichen kommt dann bisher gefundenes und sein Vorkommen speichern (z.b. ein eine StringBuffer)
du hast geschrieben das du die theorie verstanden hast.
es gibt ja schon bekannte komprimierungs-algorythmen.
versuch die doch einfach mal nach zu bilden. Zip z.B.
auch wenn java schon Klassen für Zip hat.
Vielleicht verstehst du es dann besser wenn du erst mal
was bekanntes nachbaust.
Klar kann man das mit Stringbuffer machen aber fertig gibts da nix. Das must du schon selber machen aber das ist ja, denke ich, wirklich einfach. Das ist eine der einfachste aller Komprimierungsarten, wenn auch nicht für Text geeignet.
ich habe mir so was gebastelt , komprimiert aber nicht so ganz
ich weiss es ist ein Logikfehler, komme aber nicht drauf
Code:
public void Ausführen(Object datenstruktur) {
int counter = 0;
int Laenge =0;
if (ausführenpacken) {
StringBuffer text = (StringBuffer)datenstruktur;
Laenge = text.length();
for (int j = 0; j <Laenge; j++) {
char a = text.charAt(j);
if (a == text.charAt(j)) {
counter++;
}
System.out.println(text.append(counter)+""+text.charAt(j));
}
und test
Code:
public class Daten_test {
public static void main(String[] args) {
Daten komprimieren= new Daten();
StringBuffer text=new StringBuffer("AAAAAGGGGGGGGGSSSSSSSSSDDDDDDD");
System.out.println("Nicht komprimierte Text ausgeben " + text);
komprimieren.Ausführen(text);
System.out.println(text);
}
}
Ich hab mal rumgebastelt, und bin auf folgendes gekommen:
Code:
public static String pack( String string ){
int index = 0;
StringBuffer result = new StringBuffer();
for( int i = 0, n = string.length(); i<n; i++ ){
if( string.charAt( index ) != string.charAt( i )){
result.append( i-index );
result.append( string.charAt( index ));
index = i;
}
}
result.append( string.length()-index );
result.append( string.charAt( index ) );
return result.toString();
}
Die Idee ist:
Man muss die Position des ersten Zeichens eines "Blockes" und die des letzten kennen, um die Anzahl Zeichen herauszufinden.
"index" speichert die Position des ersten Zeichens. Die Schlaufe durchläuft alle Indices für die verschiedenen Zeichen. Sobald ein Zeichen gefunden wird, das nicht mit dem ersten Zeichen (mit Position index) übereinstimmt, ist ein Block fertig. Dann wird gespeichert.
Zuletzt wird der letzte Block gespeichert, weil der ja nicht mehr gefunden wird.
public static void pack( StringBuffer string ){
int index = 0;
int length = string.length();
for( int i = 0, n = length; i<n; i++ ){
if( string.charAt( index ) != string.charAt( i )){
string.append( i-index );
string.append( string.charAt( index ));
index = i;
}
}
string.append( length-index );
string.append( string.charAt( index ) );
string.delete( 0, length );
}