Fehlerbehandlung beim Parsen von Strings

welche Fehlerbehandlung für NumberFormatException?

  • try-catch und fehlerhafte Zeilen überspringen

    Stimmen: 0 0,0%
  • try-catch, fehlerhafte Zeilen überspringen und Loggen

    Stimmen: 0 0,0%

  • Anzahl der Umfrageteilnehmer
    3

kirdie

Bekanntes Mitglied
Ich habe eine Methode, die aus einem String eine Instanz einer bestimmten Klasse erzeugt. Da ein Attribut der Klasse ein Doublewert ist, frage ich mich jetzt, wie ich eine NumberFormatException behandle.

P.S: Mensch ihr seid ja schnell mit dem Antworten, der Thread ist noch garnicht richtig fertig :)

Hier ein Beispielstring:

Code:
bla,blubb,0.5
bli,blo,0.7
blu,blarg,0.8

Das Format ist also String Komma String Komma Doublewert.
Allerdings soll ein Benutzer in einer GUI in einem Textfeld den String selbst erstellen und kann dabei ja auch Fehler machen.
Und die Klasse ist im wesentlichen eine Map<String,Map<String,Double>> mit ein paar Methoden.

P.S.: Habe in der API eine ParseException gefunden und jetzt erstmal folgenden Code. Ist das ok so?
Java:
...
try{mapping.add(tokens[0], tokens[1], Double.valueOf(tokens[2]));}
catch(NumberFormatException e) {throw new ParseException("Error parsing line "+line, lineCount);}
...
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Wie ist denn der String aufgebaut(z.b. komma getrennt? json? :D) ? Weisst du nicht dass sich an dieser Stelle ein doublewert kommt? :bahnhof:

/edit: mir fehlt da eine entscheidende antwortmöglichkeit. und die hat nichts mit einer exception zu tun - würde vorher schon zusehen dass es erst gar nicht zu solch einer kommen kann...
 
Zuletzt bearbeitet:

ARadauer

Top Contributor
Das ist eine fachliche Entscheidung... und kommt drauf an...
Aber im generell wenn der Benutzer es eingibt, würde ich ihm direkt einen Fehler anzeigen...
 

Marco13

Top Contributor
würde vorher schon zusehen dass es erst gar nicht zu solch einer kommen kann...

Es gibt keine wirklich praktikable Möglichkeit, bei einem beliebigen (ggf. vom Benutzer eingegebenen) String zu erkennen, ob es ein gültiger double-Wert ist, außer zu parsen und (durch Fangen der Exception) zu schauen, ob es geklappt hat.

Eigene Exception-Klassen sollte man sparsam einsetzen. Die ParseException wäre eine Option. Da man keine "cause"-Exception übergeben kann, sollte der Message-String aber vielsagender sein. Aber... auch die ParseException wird man doch irgendwo abfangen und dem Benutzer einen Hinweis präsentieren? (Ggf. den Text des Eingabefeldes Rot machen und eine Statusmeldung, oder den schon Erwähnten Dialog...)
 

eRaaaa

Top Contributor
Es gibt keine wirklich praktikable Möglichkeit, bei einem beliebigen (ggf. vom Benutzer eingegebenen) String zu erkennen, ob es ein gültiger double-Wert ist, außer zu parsen und (durch Fangen der Exception) zu schauen, ob es geklappt hat.

Wie der String aussieht und dass der in einer GUI vom User eingegeben werden kann war bis zu dem Zeitpunkt als ich den Post machte noch gar nicht klar :)

Aber auch dafür könnte man evtl. den Scanner benutzen, da kann man sogar locale spezifisch was abfragen in Sachen hasNextDouble.... :bahnhof:
 
S

Spacerat

Gast
ParsingImpossibleException? Was das denn? Das Parsen selbst dürfte kaum unmöglich sein sondern eher der Umstand nach einer Fehleingabe brauchbare Ergebnisse zu liefen. Also wenn es 'ne Exception sein soll, dann NumberFormatException. Aber wieso überhaupt eine mögliche Exception einplanen, wenn es andere Möglichkeiten gibt, Zahlen sicher zu erkennen. Je nach Quelle der Daten bieten sich diverse Methoden an. Zum einen RegEx - hat den Vorteil, dass die Datenquelle relativ egal sein darf, aber den Nachteil, dass man sich möglicherweise mit etwas Neuem auseinander setzen darf, was einem immer wie ein rotes Tuch vorkommt. Zum anderen der StreamTokenizer - Der Vorteil bei diesem ist, dass standardmässig dazu in der Lage ist, Texte aus einem Stream zu lesen und dabei auch direkt Zahlen (doubles) erkennt. Der Nachteil: Er lässt sich nur auf Streams (also Dateien oder ähnlichem) anwenden.
 

Marco13

Top Contributor
Also wenn es 'ne Exception sein soll, dann NumberFormatException.

Ich nehme an, das war einer der Punkte, die ARadauer mit "Das ist eine fachliche Entscheidung" meinte (und die ohne genaueres Wissen über den Kontext schwer enscheiden werden können) : FALLS dort z.B. auch der Fall auftreten kann, dass man ein Datum parsen muss, dann wäre eine NumberFormatException unpassend, und es könnte sinnvoller sein, "alle parsing-Exceptions" in eine allgemeine "ParsingException" oder so einzuwickeln...

Aber wieso überhaupt eine mögliche Exception einplanen, wenn es andere Möglichkeiten gibt, Zahlen sicher zu erkennen. Je nach Quelle der Daten bieten sich diverse Methoden an. Zum einen RegEx - hat den Vorteil, dass die Datenquelle relativ egal sein darf, aber den Nachteil, dass man sich möglicherweise mit etwas Neuem auseinander setzen darf, was einem immer wie ein rotes Tuch vorkommt.

Ich hatte schon ein paar mal die "Challenge" gestellt: Jemand soll eine RegEx definieren, die GENAU die Strings matcht, die mit Float.parseFloat fehlerfrei zu einem float geparst werden können. Bisher hat sich noch keiner getraut... Willst du mal dein Glück versuchen? ;)
 
S

Spacerat

Gast
@Marco13: Wie genau meinst du das? Was macht [c](\\d+)[/c]? Reicht das nicht? Bin da wirklich nicht all zu firm.
 

Marco13

Top Contributor
Das 'd' erkennt Ziffern. Schon ein "-1" würde nicht erkannt. Ein "-1.2" sowieso nicht. Bei sowas wie "-.1e2f" haut's wohl auch ausgefeiltere RegExes raus. Und wenn jemand meinen würde, alles abgedeckt zu haben, würde ich eines meiner Asse ausspielen, und ihm klarmachen, dass er "NaN" vergessen hat :D
 

kirdie

Bekanntes Mitglied
Vielen Dank für die vielen und schnellen Antworten. Ich habe mich aber entschieden, bei der ParseException zu bleiben, da diese den Vorteil hat, dass sie die Zeilennummer enthält. Dadurch kann ich dem Benutzer die entscheidende Zeile dann rot markieren und er kann sie korrigieren. Reguläre Ausdrücke kann ich aber ich finde sie hier nicht so passend.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Fehlerbehandlung an einem Beispiel Java Basics - Anfänger-Themen 8
M Best Practice Mehrstufige Fehlerbehandlung Java Basics - Anfänger-Themen 8
V Sudoku-Solver Probleme bei der Fehlerbehandlung Java Basics - Anfänger-Themen 12
D MVC Fehlerbehandlung Java Basics - Anfänger-Themen 18
C Prozess Fehlerbehandlung Java Basics - Anfänger-Themen 2
M Fehlerbehandlung Java Basics - Anfänger-Themen 6
F Fehlerbehandlung finally weglassen?? Java Basics - Anfänger-Themen 4
N Fehlerbehandlung Java Basics - Anfänger-Themen 12
M Fehlerbehandlung Java Basics - Anfänger-Themen 3
S Fehlerbehandlung Java Basics - Anfänger-Themen 12
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
Kerstininer Vererbung Hilfe beim lernen von Objektorientierung für eine Klausur Java Basics - Anfänger-Themen 10
A Hilfe beim Lesen von Pfaden und Systemvariablen Java Basics - Anfänger-Themen 3
M Ausgabe beim Overloading Java Basics - Anfänger-Themen 3
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
M Nullpointer beim befüllen meiner Liste im Object Java Basics - Anfänger-Themen 3
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
I Projekte in IDE untereinander sharen / Probleme beim Build Java Basics - Anfänger-Themen 8
paulen1 Best Practice "Unchecked Assignment" Warnung beim erstellen eines 2D Arrays of Arraylists Java Basics - Anfänger-Themen 2
T Probleme beim Import eines Git-Repos Java Basics - Anfänger-Themen 2
C GLOOP Problem beim Erstellen der Kamera Java Basics - Anfänger-Themen 9
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
T DamagedFontException beim drucken Java Basics - Anfänger-Themen 3
Z SNAKE Schlange beim Aufheben von Essen verlängern Java Basics - Anfänger-Themen 4
Bugs Bunny Fehlerhafte Berechnung beim erneuten Durchlaufen der Schleife Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
Fiedelbambu Prüfen von Komma stelle beim Taschenrechner Java Basics - Anfänger-Themen 5
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
X Hilfe beim Übertragen in eine For-Schleife Java Basics - Anfänger-Themen 1
S Fehler beim Programm Java Basics - Anfänger-Themen 2
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
I InputStream beim zweiten Mal fehlerhaft Java Basics - Anfänger-Themen 10
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
C Brauche Hilfe beim Schreiben eines Programmes :/ Java Basics - Anfänger-Themen 1
cmn489 Werte beim Funktionsaufruf in ein Feld übertragen(falls dieses leer ist) Java Basics - Anfänger-Themen 1
I Output BigDecimal anstatt double / Problem beim Rechnen Java Basics - Anfänger-Themen 16
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
O Methode in while-Schleife aufrufen geht nur beim ersten Mal Java Basics - Anfänger-Themen 2
pry bitte Hilfe beim Kreditrechner objektorientiert Java Basics - Anfänger-Themen 6
J Hilfe beim Label animieren Java Basics - Anfänger-Themen 1
Avalon Programmierstil beim Mocken Java Basics - Anfänger-Themen 45
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
J Hilfe beim verstehen Java Basics - Anfänger-Themen 3
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
P Problem beim Überschreiben einer vererbten Methode Java Basics - Anfänger-Themen 4
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
L Anfänger braucht Hilfe - Stecke beim Lernen fest Java Basics - Anfänger-Themen 10
N Probleme beim printen von Arrays durch for Schleife Java Basics - Anfänger-Themen 3
Bluedaishi Hilfe beim erklären dieser Methode Java Basics - Anfänger-Themen 5
E Macht Java Rechenfehler beim Potenzieren und Mod? Java Basics - Anfänger-Themen 5
J Hilfe beim Programmieren Java Basics - Anfänger-Themen 5
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
S Endlosschleife beim Ausgeben einer LinkedList Java Basics - Anfänger-Themen 2
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
L Brauche Hilfe beim arbeiten mit Konstruktoren Java Basics - Anfänger-Themen 20
D Was tun gegen zu komplzierten Denken beim Programmieren Java Basics - Anfänger-Themen 27
G Problem beim Speichern von Objekten in einer Datei Java Basics - Anfänger-Themen 7
S Collections funktionale Listen (ListNode<E>) review und problem beim clone Java Basics - Anfänger-Themen 0
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
L Kleine Hilfe beim Schreiben eines Programmes benötigt :D Java Basics - Anfänger-Themen 40
T Fehlermeldung beim Versuch, einen String einzulesen Java Basics - Anfänger-Themen 4
V Wie wiederhole ich eine for-Schleife beim erreichen eines Wertes Java Basics - Anfänger-Themen 9
W Hilfe beim Chat Programm Java Basics - Anfänger-Themen 14
D Beim Programmieren auf die Logisch einfache Lösung kommen. Java Basics - Anfänger-Themen 17
S IndexOutOfBoundsException beim hinzufügen eines Elements zu einer Liste Java Basics - Anfänger-Themen 11
R String index out of range: -1 beim Datei Parsen Java Basics - Anfänger-Themen 15
I Methoden List.contains() beim 2. Element = true Java Basics - Anfänger-Themen 1
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
O Verwirrt beim Java Collection Framework aufruf! Java Basics - Anfänger-Themen 9
S switch case fängt beim letzten case an Java Basics - Anfänger-Themen 6
S Erste Schritte Hilfe beim lernen von Programmieren Java Basics - Anfänger-Themen 2
der_Schokomuffin Hilfe gesucht beim Thema Objekte übergeben! Java Basics - Anfänger-Themen 2
A Pendeltouren beim Savings erfahren "schummeln" in Ordnung? Java Basics - Anfänger-Themen 1
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
T Fehlermeldung beim Starten von FlashTool Java Basics - Anfänger-Themen 27
C Rekursives Backtracking beim Spiel Peg Java Basics - Anfänger-Themen 22
K Fehler beim Programmieren von TicTacToe Java Basics - Anfänger-Themen 12
J Hilfe beim Runden Java Basics - Anfänger-Themen 4
C Erste Schritte ArrayIndexOutOfBoundsException beim Speichern im Array Java Basics - Anfänger-Themen 2
F Problem beim entfernen von mehreren Listenelementen auf einmal (Programmierung des Spiels Arschloch) Java Basics - Anfänger-Themen 1
L Fehler beim laden eines Icons Java Basics - Anfänger-Themen 3
D Probleme beim Kompelieren mache ich etwas falsch ? Java Basics - Anfänger-Themen 3
R Methoden NPE beim Aufruf einer Methode einer anderen Klasse Java Basics - Anfänger-Themen 4
K Probleme beim Programm schreiben - Lesen von Dateiinhalten -zaehlen von Wörtern/ Buchstaben Java Basics - Anfänger-Themen 4
M Probleme beim aktualisieren eines JPanels Java Basics - Anfänger-Themen 7
J Probleme beim Array ausgeben Java Basics - Anfänger-Themen 4
CptK Bild beim betätigen eines JButtons Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben