Heyho,
ich versuche mich derzeit an einer sehr primitiven Datenkomprimierung
Und zwar möchte ich mehrmals hintereinander vorkommende Zeichen
codieren um Speicherplatz zu sparen.
Derzeit habe ich 2 Klassen und eine TestKlasse geschrieben.
Die erste Klasse durchläuft einen String und testet, ob das
aktuelle gespeicherte Zeichen, gleich dem Zeichen an der
Stelle "i" des Strings ist. Wenn ja, soll die Stelle, das Zeichen
und die Anzahl der gleichen Zeichen gespeichert werden.
Dies bekomme ich auch wunderbar hin, nur logischerweise gibt
er mir bei dem derzeitigen Stand des Codes immer nur den letzten
Runs des Strings aus, d. h.:
BeispielString: aaabbbbbccc
Hier sollte er mir ausgeben :
1 3 a
4 5 b
9 3 c
aber wie gesagt gibt er mir hier ja erst 9 3 c aus, das liegt daran,
dass ich bisher noch auf keine Idee gekommen bin, wie ich die
vorherigen Runs auch abspeichern und ausgeben kann.
In der Klasse 2 werde ich sobald die erste Klasse funktioniert,
die Zeichen convertieren.
Class Run.java:
Class Compression.java
Class RunTest.java
Jemand ne Idee?^^
ich versuche mich derzeit an einer sehr primitiven Datenkomprimierung
Und zwar möchte ich mehrmals hintereinander vorkommende Zeichen
codieren um Speicherplatz zu sparen.
Derzeit habe ich 2 Klassen und eine TestKlasse geschrieben.
Die erste Klasse durchläuft einen String und testet, ob das
aktuelle gespeicherte Zeichen, gleich dem Zeichen an der
Stelle "i" des Strings ist. Wenn ja, soll die Stelle, das Zeichen
und die Anzahl der gleichen Zeichen gespeichert werden.
Dies bekomme ich auch wunderbar hin, nur logischerweise gibt
er mir bei dem derzeitigen Stand des Codes immer nur den letzten
Runs des Strings aus, d. h.:
BeispielString: aaabbbbbccc
Hier sollte er mir ausgeben :
1 3 a
4 5 b
9 3 c
aber wie gesagt gibt er mir hier ja erst 9 3 c aus, das liegt daran,
dass ich bisher noch auf keine Idee gekommen bin, wie ich die
vorherigen Runs auch abspeichern und ausgeben kann.
In der Klasse 2 werde ich sobald die erste Klasse funktioniert,
die Zeichen convertieren.
Class Run.java:
Java:
public class Run{
private String mZeichenkette;
private int mStelle, mRunLength, mAnzahlGleich;
private char mZeichenAktuell = ' ';
//*****Konstruktor***********************
public Run(String aZeichenkette){
this.setZeichenkette(aZeichenkette);
}
//*****************************************************************************************************************************************
public void getRun(){
this.setRunLength(this.getZeichenkette().length());
for(int i = 0; i < this.getRunLength(); i++){
if(this.getZeichenAktuell() != this.getZeichenkette().charAt(i)){
this.setZeichenAktuell(this.getZeichenkette().charAt(i));
this.setAnzahlGleich(0);
}
this.setAnzahlGleich(this.getAnzahlGleich()+1);
this.setStelle(i - this.getAnzahlGleich()+2);
//String aString = new String();
//aString = aString + this.getZeichenAktuell() + this.getAnzahlGleich();
//System.out.println(aString);
}
}
//*****************************************************************************************************************************************
private String getZeichenkette(){
return mZeichenkette;
}
//*****************************************************************************************************************************************
private void setZeichenkette(String aZeichenkette){
mZeichenkette = aZeichenkette;
}
//*****************************************************************************************************************************************
public int getStelle(){
return mStelle;
}
//*****************************************************************************************************************************************
private void setStelle(int aStelle){
this.mStelle = aStelle;
}
//*****************************************************************************************************************************************
public int getRunLength(){
return mRunLength;
}
//*****************************************************************************************************************************************
private void setRunLength(int aRunLength){
this.mRunLength = aRunLength;
}
//*****************************************************************************************************************************************
public int getAnzahlGleich(){
return mAnzahlGleich;
}
//*****************************************************************************************************************************************
private void setAnzahlGleich(int aAnzahlGleich){
this.mAnzahlGleich = aAnzahlGleich;
}
//*****************************************************************************************************************************************
public char getZeichenAktuell(){
return mZeichenAktuell;
}
//*****************************************************************************************************************************************
private void setZeichenAktuell(char aZeichenAktuell){
this.mZeichenAktuell = aZeichenAktuell;
}
//*****************************************************************************************************************************************
}
Class Compression.java
Java:
import java.util.Scanner;
public class Compression {
Scanner input = new Scanner(System.in);
//*****Konstruktor***********************
public Compression(){}
//*****************************************************************************************************************************************
public void getInfos(){
System.out.print("Bitte eine Zeichenfolge eingeben: ");
String aString = input.nextLine();
Run run = new Run(aString);
run.getRun();
int start = run.getStelle();
int folge = run.getAnzahlGleich();
char zeichen = run.getZeichenAktuell();
System.out.println(start+ " " +folge+ " " +zeichen);
}
//*****************************************************************************************************************************************
}
Class RunTest.java
Java:
public class RunTest{
public static void main(String[] args){
Compression comp = new Compression();
comp.getInfos();
}
}
Jemand ne Idee?^^