StringBuffer - kleine Minifrage ;-)

nighty86

Grünschnabel
Hallo,
Meine Frage ist recht kurz...

Also, ich hab ein Stringbuffer, und muss den letzten "," durch ein ""und"" ersetzen.
Das mach ich ja über replace. Es gilt ja :

Java:
replace(int start, int end, String str)

Geb ich dann jeweils bei start und end lastindexof(",") ein? und am Ende eben das " und " ?
Weil, ich kriege da eine StringIndexOutOfBounds Exception.

Also, hab es zB so :

Java:
		public void actionPerformed(ActionEvent arg0)
        {
                StringBuffer auswahl = new StringBuffer();
                StringBuffer groe = new StringBuffer();
                double preis = 0;
               

       

                for (int i = 0; i < checkb.length; i++)
                {
                        if(checkb[i].isSelected())
                        {
                                auswahl.append(checkb[i].getText());
                                auswahl.append(", ");
                                preis = preis + ppz;
                        }
                }
                int ende = auswahl.length();

                for (int i = 0; i < radiob.length; i++)
                {
                        if(radiob[i].isSelected())
                        {
                              groe.append(radiob[i].getText());
                              if (radiob[i].getText() == "klein")
                              {
                                      preis += grundpreise[0];
                              }
                              else if (radiob[i].getText() == "normal")
                              {
                                      preis += grundpreise[1];
                              }
                              else if (radiob[i].getText() == "groß")
                              {
                                      preis += grundpreise[2];
                              }
                                     
                        }
                }

               
                auswahl.deleteCharAt(auswahl.lastIndexOf(","));
                auswahl.replace(auswahl.lastIndexOf(","), auswahl.lastIndexOf(","), " und ");
                String preistostr = String.valueOf(preis);
                bestelltext.setText("Sie haben eine Pizza der Größe \""+groe.toString()+"\" mit K\u00e4se, Tomaten, "+auswahl.toString()+"bestellt. Der Preis beträgt "+ preistostr + "€. Vielen Dank.");

Wenn ich hier aber nur eine Sache auswähle, dann krieg ich eben die Exception :(
Danke erstmal im voraus!
 
Könntest du vielleicht mal die Exception komplett posten, das würde ein paar mehr Infos geben was genau schief geht und vorallem wo etwas schief geht.

Die StringIndexOutOfBoundsException hört sich aber fast danach an dass nach dem ersten Delete kein Komma mehr gefunden wird und die funktion lastIndexOf() ein -1 zurückgibt was danach natürlich zu einem Fehler führt.

Eine Möglichkeit ein solchen Fehler zu vermeiten wäre das vorherige Prüfen ob noch ein Komma vorhanden ist:
Java:
int pos = auswahl.lastIndexOf(",");
if(pos != -1) {
     auswahl.deleteCharAt(pos);
}
pos = auswahl.lastIndexOf(",");
if(pos != -1) {
     auswahl.replace(pos, pos, " und ");
}
Es mag zwar auch elegentar gehen aber für den Anfang tut das auch.
 
Jo, ich krieg -1, also :
Exception in thread "AWT-EventQueue-0" java.lang.StringIndexOutOfBoundsException: String index out of range: -1

An Zeile :
auswahl.replace(auswahl.lastIndexOf(","), auswahl.lastIndexOf(","), " und ");

Ich werd dein Teil dort mal probieren und gucken ob es klappt. Dankeschön :)
 
hier noch die Antwort auf deine PN
Falls du nur eine Zutat ausgewählt hast und willst doch noch ein "und" dann könntest du das obere Beispiel wie folgt erweitern:
Java:
pos = auswahl.lastIndexOf(",");
if(pos != -1) {
      auswahl.replace(pos, pos, " und "); // falls ein Komma da ist, tauschen
} else {
      auswahl.insert(0, " und "); // wenn kein Komma da ist, am Anfang einfügen
}
 
Mir fallen eher andere Ungereimtheiten in deinem Code auf.

1.
Code:
if (radiob[i].getText() == "klein")
Hier vergleichst du Strings mit "==" das ist falsch. Damit vergleichst du, ob es die gleiche String Instanz ist und nicht ob der Inhalt gleich ist. Dafür benutzt man bei Objekten equals. Bei String kann es gleich sein, muss es aber nicht.(Stichwort Stringpool)

2.
Warum verwendest du einen StringBuffer und keinen StringBuilder? Wird die Klasse etwa von mehreren Threads gleichzeitig benutzt oder benutzt du noch eine ältere Java-Version?
 

Neue Beiträge

Zurück