Fehler bei Code mit SubStrings für mich nicht auffindbar.

Stamp1t

Mitglied
Hallo,
mit folgendem Code möchte ich, dass zwei Texte eingegeben werden können und diese dann auf Basis derer ersten und letzten Buchstaben verglichen werden, sodass man beispielsweise in der Schule Abschreiber aufdecken kann. Danke schonmal im vorraus! 🙂
Die Fehler Meldung:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: begin 55, end 57, length 56
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:3720)
at java.base/java.lang.String.substring(String.java:1909)
at sstring.checker(sstring.java:8)
at Main.main(Main.java:14)

Mein Code:
[CODE lang="java" title="Main Klasse"]public class Main {

public static void main(String[] args) {

sstring Philipp = new sstring();
Philipp.checker("Bei dem Gedicht handelt es sich um ein Gedicht der Romantik.", "Bei dem Gedicht handelt es sich um ein Gedicht der Romantik");
if(Philipp.isChecker()) {
System.out.println("Text wurde abgeschrieben");
}




}

}[/CODE]





[CODE lang="java" title="selbsterstellte Klasse"]public class sstring {
String TextS;
String TextC;
boolean checker;

public boolean checker(String TextS, String TextC) {
if(TextS.substring(0, 3).equals(TextC.substring(0, 3)) && TextS.substring(TextS.length() - 3, TextS.length()).equals(TextC.substring(TextS.length() - 3, TextS.length()))) {
checker = true;
}
else {
checker = false;
}
return checker;
}

public boolean isChecker() {
return checker;
}


}[/CODE]
 
Java:
TextC.substring(TextS.length() - 3, TextS.length())
Beim substring Aufruf von TextS nutzt Du die Länge von TextS. Du willst überall TextC verwenden um die letzten Zeichen von TextC zu bekommen.

Dann noch der kleine Hinweis: Naming Conventions: Variablen sollten mit einem kleinen Buchstaben anfangen. Klassen mit einem großen.
Und dann evtl. auch noch sinnvollere Namen verwenden die man dann auch leichter auseinander halten kann. Dann sieht man so Verwechslungen auch leichter.
 
Java:
TextC.substring(TextS.length() - 3, TextS.length())
Beim substring Aufruf von TextS nutzt Du die Länge von TextS. Du willst überall TextC verwenden um die letzten Zeichen von TextC zu bekommen.

Dann noch der kleine Hinweis: Naming Conventions: Variablen sollten mit einem kleinen Buchstaben anfangen. Klassen mit einem großen.
Und dann evtl. auch noch sinnvollere Namen verwenden die man dann auch leichter auseinander halten kann. Dann sieht man so Verwechslungen auch leichter.
Vielen Dank, das hat geklappt! Allerdings habe ich nicht so wirklich verstanden wieso. Die Länge von TextC ist doch gleich der Länge von TextS oder?
 
Vielen Dank, das hat geklappt! Allerdings habe ich nicht so wirklich verstanden wieso. Die Länge von TextC ist doch gleich der Länge von TextS oder?
Nein, denn der erste String hat am Ende noch einen "." und ist daher 1 Zeichen länger.
Wären die Strings gleich lang, dann könnte man sowas natürlich machen, aber das halte ich für generell unschön, da so Code leicht zu Fehlern führt.
 
Nein, denn der erste String hat am Ende noch einen "." und ist daher 1 Zeichen länger.
Wären die Strings gleich lang, dann könnte man sowas natürlich machen, aber das halte ich für generell unschön, da so Code leicht zu Fehlern führt.
Alles klar, das habe ich vollkommen übersehen. Habe den Code jz so verbessert, dass die Länge der beiden Texte irrelevant ist. Vielen Dank für die gute und schnelle Hilfe
 

Neue Themen


Zurück
Oben