Hallo Leute,
ich bin grad am basteln für eine Aufgabe. Ich lese als erstes aus zwei Textdateien jeweils einen String ein. alicekettef (20 Zeichen ohne Leerzeichen) ist der String, in dem eine Zeichenfolge enthalten ist, die möglichst ohne andere Unterbrechungen (Zeichen) in bobkettef (1024 Zeichen) wiedergefunden werden soll. Es werden eine bestimmte Anzahl an Zeichen toleriert, die sich zwischen der gesuchten Zeichenkette befinden. Ein kleines Beispiel:
Ich toleriere einen Fehler
Ich habe einen String: "hallo", denn ich in diesem String suche: "halolo"
Das o zwischen den beiden l's würde dann hier als ein falsches Zeichen gelten und sollte entsprechend meiner Methode als gefundene "Übereinstimmung" ausgegeben werden.
Es gibt also zwei Fälle: wenn das Zeichen aus alicekettef gleich bobkettef ist, dann sucht man einfach weiter, wenn nicht wird geschaut ob die Anzahl der falschen Zeichen (zaehlerfalsche) größer maxfalschekettenglieder ist. Wenn dies der Fall ist, dann kann an dieser Stelle der Teilstring nicht in Frage kommen und man sucht weiter im bobkettef(Dafür ist die for-Schleife da), beginnt aber bei alicekettef wieder am Anfang der Zeichenkette. Andernfalls wird die Suche weiter fortgesetzt.
Ich bekomme nun einen Fehler: "Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
at java.lang.String.charAt(String.java:686)
at Halskette.aufgabe2(Halskette.java:51)
at Halskette.main(Halskette.java:13)"
Die Methode Aufgabe2 sieht wie folgt aus:
Die beiden Strings sind richtig eingelesen worden und als Public schon vorher in der Klasse deklariert, gleiches gilt für maxfalschekettenglieder (Diese Zahl soll der Benutzer nachher selbst festlegen, um eine Auswahl über die möglichen falschen Glieder im String zu treffen).
Kann mir jemand sagen warum die Methode jetzt ein outofbounds wirft? Ich verstehe das echt nicht. Eigentliche setze ich ja suchealice wieder zurück wenn es entsprechend viele falsche Glieder im String gibt.
ich bin grad am basteln für eine Aufgabe. Ich lese als erstes aus zwei Textdateien jeweils einen String ein. alicekettef (20 Zeichen ohne Leerzeichen) ist der String, in dem eine Zeichenfolge enthalten ist, die möglichst ohne andere Unterbrechungen (Zeichen) in bobkettef (1024 Zeichen) wiedergefunden werden soll. Es werden eine bestimmte Anzahl an Zeichen toleriert, die sich zwischen der gesuchten Zeichenkette befinden. Ein kleines Beispiel:
Ich toleriere einen Fehler
Ich habe einen String: "hallo", denn ich in diesem String suche: "halolo"
Das o zwischen den beiden l's würde dann hier als ein falsches Zeichen gelten und sollte entsprechend meiner Methode als gefundene "Übereinstimmung" ausgegeben werden.
Es gibt also zwei Fälle: wenn das Zeichen aus alicekettef gleich bobkettef ist, dann sucht man einfach weiter, wenn nicht wird geschaut ob die Anzahl der falschen Zeichen (zaehlerfalsche) größer maxfalschekettenglieder ist. Wenn dies der Fall ist, dann kann an dieser Stelle der Teilstring nicht in Frage kommen und man sucht weiter im bobkettef(Dafür ist die for-Schleife da), beginnt aber bei alicekettef wieder am Anfang der Zeichenkette. Andernfalls wird die Suche weiter fortgesetzt.
Ich bekomme nun einen Fehler: "Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20
at java.lang.String.charAt(String.java:686)
at Halskette.aufgabe2(Halskette.java:51)
at Halskette.main(Halskette.java:13)"
Die Methode Aufgabe2 sieht wie folgt aus:
Java:
static void aufgabe2(){
int richtige = 0;
int suchealice = 0;
for(int feldsuche = 0; feldsuche <= (bobkettef.length() - alicekettef.length()-1); feldsuche++){ //Durchsucht komplett bobkettef
if((alicekettef.charAt(suchealice) == bobkettef.charAt(feldsuche)) && (maxfalschekettenglieder >= zaehlerfalsche) && (alicekettef.length() > (suchealice - maxfalschekettenglieder))){
richtige++;// Weitersuchen weil Übereinstimmung und Kette nicht zu lang
suchealice++; //Suchindex in der alicekettef um eins erhöhen
}
else if((maxfalschekettenglieder >= zaehlerfalsche) && (alicekettef.length() >= (suchealice - maxfalschekettenglieder-1))){
zaehlerfalsche++;//Keine Übereinstimmung aber Möglichkeit eines Fehlers
suchealice ++; //Suchindex in der alicekettef um eins erhöhen
}
else{
if(richtige == (alicekettef.length()-1)){
System.out.println((feldsuche - richtige - zaehlerfalsche));
}
suchealice = 0; //Wieder zum Anfang der gegebenen Kette springen
feldsuche = (feldsuche -zaehlerfalsche - richtige); //Suche forsetzen
richtige = 0;
zaehlerfalsche = 0;
}
}
}
Die beiden Strings sind richtig eingelesen worden und als Public schon vorher in der Klasse deklariert, gleiches gilt für maxfalschekettenglieder (Diese Zahl soll der Benutzer nachher selbst festlegen, um eine Auswahl über die möglichen falschen Glieder im String zu treffen).
Kann mir jemand sagen warum die Methode jetzt ein outofbounds wirft? Ich verstehe das echt nicht. Eigentliche setze ich ja suchealice wieder zurück wenn es entsprechend viele falsche Glieder im String gibt.