Java Rechnung |
12.06.2015, 19:14 | Auf diesen Beitrag antworten » | |||||
Björn | Java Rechnung Meine Frage: Hi zusammen :-) folgendes Problem: Ich habe einen String mit Zahlen und Rechenzeichen. Ich möchte vor dem Mal-Zeichen die Zahl inklusive Vorzeichen mittels eines Substrings auslesen. Da im String ja + oder - und auch * oder / vorkommen kann wollte ich diese Fälle in der while-Anweisung abdecken. Leider bekomme ich immer eine OutofBounds-Exception (Zeile 23). Wenn ich nur eine Anweisung abfrage (also plus zum Beispiel) funktioniert es, nur bei mehreren nicht. Woran könnte das liegen? Vielen Dank :-) Meine Ideen:
|
|||||
|
||||||
13.06.2015, 06:57 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl |
Grob überschlagen hat der Inhalt der Variablen name weniger als 1000 Zeichen. Da kriegst du ein OutOfBounds bezüglich der oberen Grenze. Wenn du dann bei --i; abziehst und vor dem '*' nicht an der selben Stelle '+' und '-' hast - was ja gar nicht geht, du brächtest && statt || - willst du auf charAt(-1) zugreifen. Das ist die Exception, die du letztlich angezeigt bekommst. |
|||||
13.06.2015, 09:09 | Auf diesen Beitrag antworten » | |||||
Björn | Super, danke dir. Da liegt das Problem. Eine weitere Frage hätte ich noch: Wenn ich den String name nehme und möchte mit der Methode replaceAll etwas ersetzen, funktioniert es nicht, z.B. String name = "15-16*6+24"; name.replaceAll ("16*6",576); Allerdings kommt da immer wieder der Ausgangsstring heraus. Liegt das vielleicht an dem Malzeichen, da es ein Char ist? Vielen Dank :-) |
|||||
13.06.2015, 09:34 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Strings sind immutable, können also nicht verändert werden. Daher geben Stringoperationen immer einen neuen String zurück. Den musst du auch auswerten:
Das zweite Argument muss ein String sein. Ich weise dich aber darauf hin, dass das Ergebnis der Multiplikation 96 ist. Und das '*' macht Probleme, weil es in regulären Ausdrücken eine andere Bedeutung hat. |
|||||
Anzeige | ||||||
|
||||||
13.06.2015, 09:37 | Auf diesen Beitrag antworten » | |||||
Björn | Mist, ich hatte bei 576 die Anführungszeichen vergessen.
So war es eigentlich gedacht, wird aber auch nichts ändern? |
|||||
13.06.2015, 09:42 | Auf diesen Beitrag antworten » | |||||
eulerscheZahl | Ist mir dann auch noch aufgefallen, siehe edit. replaceAll erwartet einen regulären Ausdruck, da ist das * schon reserviert, muss also escaped werden. |
|||||
13.06.2015, 09:47 | Auf diesen Beitrag antworten » | |||||
Björn | Danke für die Antworten :-) |
|
Verwandte Themen
Die Beliebtesten » |
Die Größten » |
|
Die Neuesten » |
|