Stringmanipulation

Descenter

Mitglied
Hey Leute ich hab ein Problem bei einer Übung zu Strings:

Angabe:
Es wird ein String eingelesen wie zb: Max Moritz Mustermann. Aus diesem String soll
die Anordung der Namen, wie im Folgenden aufgelistet, geändert werden:
Mustermann, Max M.


Ich habe folgendes Programm geschrieben, jedoch kommt immer wenn ich das Programm starten will, folgender Fehler:

java.lang.StringIndexOutOfBoundsException: String index out of range: -2
at java.lang.String.substring(String.java:1958)
at Stringmanipulation.main(Stringmanipulation.java:20)


Java:
public static void main ()
    {
        char restart;
        do {
            Out.print ("Geben Sie einen Namen ein der für die Manipulation geeignet ist (zB. Max Moritz Mustermann): ");
            String s = In.readString ();

            int index = s.indexOf (" "); // Index des ersten Leerzeichens wird gespeichert
            int index2 = s.lastIndexOf (" ",index); // Index des 2. Leereichens wird gespeichert

            String vn = s.substring (1, index); // String des ersten Namens wird gespeichert - Bsp. Max -
            String mn = s.substring (index, index2); // String des 2. Namens wird gespeichert - Bsp. Moritz -
            String nn = s.substring (index2+1); // String des 3. Namens wird gespeichert - Bsp. Mustermann - 

            String name = (nn + "," + vn + mn); // Ausgabe
            
            Out.print ("Möchten Sie noch einmal einen Namen generieren (j/n): ");
            restart = In.readChar ();

        } while (restart == 'j' ||  restart == 'J'); 
    }

Kann mir bitte jemand helfen??
Danke
 
S

SlaterB

Gast
Benutzereingaben sind unprüfbar, gib bei dir s aus, was ist s?

mit einem festen String gibts keine Exception, freilich aber auch sicherlich noch nicht das optimale Ergebnis,
schaue dir aber doch im Detail an, was an Indexen ausgerechnet und dann an Teilstrings ausgeschnitten wird

wenn du eine konkrete Frage hast, wie 'warum schneidet 2,4 aus ".." zu ".." und nicht ".."?', dann kann man sie klären,
aber vorerst solltest du mit vielen System.out.println() und ausprobieren selber dran arbeiten

Java:
public class Test
{
    public static void main(String[] args)
    {
        String s = "Max Moritz Mustermann";

        int index = s.indexOf(" "); // Index des ersten Leerzeichens wird gespeichert
        int index2 = s.lastIndexOf(" ", index); // Index des 2. Leereichens wird
                                                // gespeichert

        String vn = s.substring(1, index); // String des ersten Namens wird gespeichert -
                                           // Bsp. Max -
        String mn = s.substring(index, index2); // String des 2. Namens wird gespeichert -
                                                // Bsp. Moritz -
        String nn = s.substring(index2 + 1); // String des 3. Namens wird gespeichert -
                                             // Bsp. Mustermann -
        String name = (nn + "," + vn + mn); // Ausgabe
        System.out.println("name: " + name);
    }
}
 

Jodo

Aktives Mitglied
Hi,

ich empfehle
Code:
String.split(regEx);
wobei regEx ein regulärer Ausdruck ist, der Leerzeichen erkennt. Dann wird deine Eingabe bei jedem Leerzeichen zerstückelt.
 

Ähnliche Java Themen


Oben