tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Tsunamii
  • 1 Beitrag von Tsunamii
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
491
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    nighty86 nighty86 ist offline Mitglied
    Registriert seit
    Oct 2010
    Beiträge
    15
    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 :

    Code java:
    1
    
    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 :

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
            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!
     

  2. #2
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    
    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.
    nighty86 bedankt sich. 

  3. #3
    nighty86 nighty86 ist offline Mitglied
    Registriert seit
    Oct 2010
    Beiträge
    15
    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
     

  4. #4
    Tsunamii Tsunamii ist offline Mitglied Silber
    Registriert seit
    Jul 2009
    Beiträge
    75
    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:
    Code java:
    1
    2
    3
    4
    5
    6
    
    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
    }
    nighty86 bedankt sich. 

  5. #5
    nighty86 nighty86 ist offline Mitglied
    Registriert seit
    Oct 2010
    Beiträge
    15
    hallo, super, danke! Hat geklappt!
     

  6. #6
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Mir fallen eher andere Ungereimtheiten in deinem Code auf.

    1.
    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?
     
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

Ähnliche Themen

  1. kleine Uhr
    Von general_failure im Forum Werkstatt
    Antworten: 4
    Letzter Beitrag: 31.05.08, 11:50
  2. Antworten: 5
    Letzter Beitrag: 22.10.07, 12:04
  3. Anwendung StringBuffer
    Von _Truck_ im Forum Java
    Antworten: 2
    Letzter Beitrag: 31.07.07, 10:59
  4. Antworten: 0
    Letzter Beitrag: 09.11.04, 10:51
  5. StringBuffer an konstruktor übergeben
    Von AndreG im Forum Java
    Antworten: 3
    Letzter Beitrag: 01.03.04, 18:27