Hmm.. wusste nicht genau wie ich die Überschrift bennenen soll:
sollen für Semesterabschluss aufgabe ein Programm schreiben, dass eine txt datei einliesst, Wörter rausfiltert (Werden mittels ner Filter Klasse erstellt) damit wir sie vergleichen können, bla blubb (So ne billige "Plagiat version, wo dann ne Checksumme berechnet wird)
Jedenfalls bin ich eigentlich fertig, mir ist nur aufgefallen, dass er die Umlaute rauswirft bei meinem Buchstabenfilter (Er Filtert im Grunde alle Sonderzeichen raus. Nur Buchstaben und Zahlen werden zurück gegeben, damit man bei der Ausgabe z.B nicht "Untergang hat, sondern Untergang.)
glaub hier das gleiche Problem
Liegt ja sicherlich an isLetter() und das er keine Umlaute kennt sondern nur die Englischen Buchstaben? Könnte es ja mit ASCII Code machen, aber der Prof. meckert dann.
Frag mich grad wie ich das am besten lösen könne. Die Umlaute in ein Array packen und dann noch gesondert mitm if abfragen?
sollen für Semesterabschluss aufgabe ein Programm schreiben, dass eine txt datei einliesst, Wörter rausfiltert (Werden mittels ner Filter Klasse erstellt) damit wir sie vergleichen können, bla blubb (So ne billige "Plagiat version, wo dann ne Checksumme berechnet wird)
Jedenfalls bin ich eigentlich fertig, mir ist nur aufgefallen, dass er die Umlaute rauswirft bei meinem Buchstabenfilter (Er Filtert im Grunde alle Sonderzeichen raus. Nur Buchstaben und Zahlen werden zurück gegeben, damit man bei der Ausgabe z.B nicht "Untergang hat, sondern Untergang.)
Code:
package Plagiat;
import java.io.IOException;
import java.io.FilterReader;
import java.io.Reader;
public class FilterBuchstaben extends FilterReader {
FilterBuchstaben(Reader in) {
super(in);
}
/**
* @see java.io.FilterReader
*/
@Override
public int read() throws IOException {
int zeichen = in.read();
if (zeichen > 255) {
//solang bis ein zeichen erkannt wird
zeichen = in.read();
}
if (zeichen == -1) {
//Ende der Datei
return -1;
}
//ruft die Methode auf um die zeichen zu filtern
return ersetzeChar(zeichen);
}
public int ersetzeChar(int Char) {
//ersetze die Buchstaben
//wenn Char eine Zahl ist gib sie so zurück
if (Character.isDigit(Char)) {
return Char;
}
//wenn Char ein Großbuchstabe ist und ein Buchstabe (isLetter)
//wandel ihn zu einem "Kleinbuchstabe" um
if (Character.isUpperCase(Char) && Character.isLetter(Char)) {
return Character.toLowerCase(Char);
}
//wenn Char ein Kleinbuchsttabe ist und ein Buchstabe gib ihn so zurück
if (Character.isLowerCase(Char) && Character.isLetter(Char)) {
return Char;
}
//ansonsten gib ein Leerzeichen zurück (Falls Char ein Sonderzeichen ist)
return 32;
}
}
glaub hier das gleiche Problem
Code:
package Plagiat;
import java.io.IOException;
import java.io.FilterReader;
import java.io.Reader;
public class FilterWichtigesWort extends FilterReader {
FilterWichtigesWort(Reader in){
super(in);
}
/**
* @see java.io.FilterReader
*/
@Override
public int read(char[] cbuf, int off, int len)throws IOException{
String wort = "";
int wortlaenge = in.read(cbuf, off, len);
Plagiat p = new Plagiat();
p.create_tm_unwichtigeWoerter();
if(wortlaenge != -1){
//Das Wort wird in einen String konvertiert um es
//vergleichen zu können
for(int i = 0; i < wortlaenge; i++){
wort = wort + cbuf[i];
}
// wenn der Anfangsbuchstabe klein geschrieben ist & er ein Buchstabe ist & kein unwichtiges wort
if (Character.isLowerCase(cbuf[0]) && Character.isLetter(cbuf[0]) && !p.pruefeAufUnwichtig(wort)) {
//mach den Anfangsbuchstaben groß und ersetz sie in dem Char-Array.
cbuf[0] = Character.toUpperCase(cbuf[0]);
return wortlaenge;
}
return wortlaenge;
}
return -1;
}
}
Frag mich grad wie ich das am besten lösen könne. Die Umlaute in ein Array packen und dann noch gesondert mitm if abfragen?