String zerlegen

J

javaBoy21

Hi,

ich wollte in einer Funktion aus einem String die letzten Zeichen auslesen.
Also eine "Right()" Funktion.

Die sieht so aus:

public static String Right(String text, int length) {
return text.substring(text.length() - length, length);
}

Leider knallt meine App an dieser Stelle immer ab, hat jemand eine Idee wieso das nicht klappt?
An den Parametern liegt es nicht: length ist definitiv kürzer als die Länge von text.

Grüße,
Michi
 
Hi,

ich wollte in einer Funktion aus einem String die letzten Zeichen auslesen.
Also eine "Right()" Funktion.

Die sieht so aus:

public static String Right(String text, int length) {
return text.substring(text.length() - length, length);
}

Leider knallt meine App an dieser Stelle immer ab, hat jemand eine Idee wieso das nicht klappt?
An den Parametern liegt es nicht: length ist definitiv kürzer als die Länge von text.

Grüße,
Michi

Hallo!

Erstmal fällt mir auf, dass deine Methode mit einem Großbuchstaben beginnt.
Bitte für Methodennamen immer Kleinbuchstaben nehmen.

Für Code bitte java tags benutzen.
Weiters bitte immer den Fehler angeben (gegebenfalls einen Stacktrace).


Lies die mal die API-Doc durch.
Bei der Methode substring steht:

public String substring(int beginIndex, int endIndex)
Returns a new string that is a substring of this string. The substring begins at the specified beginIndex and extends to the character at index endIndex.

Und?
Fällt dir etwas auf?

*DING DING DING*

Genau! Dein beginIndex ist immer größer als der endIndex.
Glückwunsch, du hast eine Waschmaschine gewonnen!

Hier mal ein Beispiel:

Mal angenommen wir haben den String: "Ich liebe Waschmaschinen".
Jetzt möchten wir das Wort 'Waschmaschinen' abtrennen.
Das Wort startet ab index 10.

So würde der Aufruf von substring bei dir ausschauen:
return text.substring(14, 10);

Und? Klingelts?

Der beginIndex darf nicht größer als der endIndex sein!

Hier mal das richtig-gestellte:

Java:
public static String getRightPart(String text, int pos) {
return text.substring(pos,text.length);
}

Wenn man jetzt die neue Methode für das obige Beispiel benutzt, sieht es so aus:

return text.substring(10, 24);

Rein kommt: "Ich liebe Waschmaschinen" und raus kommt: "Waschmaschinen".

Grüße,
Filip
 
Zuletzt bearbeitet:
Was mccae in seinem gemecker bechreibt entspricht dem mid().und leifert alles ab einer gewissen Position - das war aber nicht die Frage. Seine Diagnose ist ebenso falsch.
Michis beginIndex kann auch kleiner als der endIndex sein. Nix mit eindeutigem *DING DING DING*....
Und mccae - sei ein bischen freundlich,. Fehler passieren und das man sie nicht sieht wenn man denkt das alles richtig ist, das passiert sogar Berufsprogrammierer!

Der Fehler ist das length am Schluss. text.length() anstelle von nur length wäre richtiger. Jedoch der Startindex ist richtig.
Java:
public static String right(String text, int length) {
    return text.substring(test.length() -  length, test.length());
}

Aber für right() gehts einfacher mit nur einem Parameter.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#substring(int)

Java:
public static String right(String text, int length) {
    return text.substring(test.length() -  length);
}

Natürlich solltest du noch eine Prüfung einbauen, damit der Parameter length nicht grösser als die Länge des Textes ist.
 
Zuletzt bearbeitet:
Hi,

sorry - es war spät und ich wollte ins Bett nachdem es einfach nicht funktionierte ;)
Einen Stacktrace konnte ich nicht mit angeben weil ich für mobile Endgeräte entwickle und diese sich ohne Meldung bei Fehlern einfach per force quit beenden.
Lediglich die Position des Fehlers kann man per Debug lokalisieren.

Ziemlich dämlich mein Fehler. Das kommt davon wenn man sich die "Right" Funktion ausm Internet nimmt und sich nie die Doku von substring anschaut .. bin halt urspünglich VB Entwickler, das sind die Funktionen Left und Right bereits ab Werk zur Verfügung gestellt :)

Danke für die Hilfe und Infos, werde ich gleich mal ausprobieren und euch Rückmeldung geben.

Grüße
 
hallo javaboy,

ich kann dir leider nich helfen aber ich hab da ein paar fragen wegen der ME programmierung, kannst du dich eventuell in icq bei mir melden?
nummer: 240336061

danke
 
Zurück