Forum: PC-Programmierung [Java] Abfrage ob Variableninhalt korrekt


von Johnny E. (electricjohnny)


Lesenswert?

Hallo Leute,

ich habe folgendes Problem:

ich bekommen Daten als String geschickt. Der String wird mit 
Float.parseFloat geparst und in ein float gewandelt.

Bei der Übertragung als String bleiben allerdings manchmal Zeichen auf 
der Strecke.

Machmal kommt also statt dem String "1,23" nur "1," oder auch nur "," 
an.
Gerade im letzen Fall schlägt das parsen fehl und die Anwendung hängt 
sich auf.

Um dies abzufangen, würde ich gerne eine Verzweigung einbauen:

Wenn der Inhalt des Strings dem Schema X,XX entspricht, parse den Text.

Genau für diesen Fall fehlt mir allerdings der Code.
Hat jemand einen Gedankenanstoß?

dankesehr!

Grüße,
dionysos

von Martin L. (martin_l795)


Lesenswert?

Hängt sich auf? Java sollte in dem Fall einfach eine Exception werfen, 
die Du entsprechend abhandeln kannst.

von foo (Gast)


Lesenswert?

Da gibt es viele Möglichkeiten,

du könntest direkt die ParseException abfangen:
1
String foo = kommtIrgendWoHer();
2
float bla;
3
try {
4
    bla = Float.parseFloat(foo);
5
} catch (Exception e) {
6
    bla = 0f;
7
}

Oder du lässt RexExps drauf los:
1
Pattern pattern = Pattern.compile("([0-9]{1},[0-9]{2})");
2
Matcher matcher = pattern.matcher(LQ);
3
if (matcher.find()) {
4
    //hier dann die Parserei mit matcher.group(1)
5
}else{
6
   //was anderes
7
}

Und ich würde überdenken, ob ich wirklich float will 
(http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) und 
nicht lieber doch auf BigDecimal umschwenken wollen würde ;)

von foo (Gast)


Lesenswert?

Arghl, Korrektur

Hier:
1
Matcher matcher = pattern.matcher(LQ);
sollte natürlich statt "LQ" dein String stehen.

und hier:
1
} catch (Exception e) {
besser ParseException statt nur Exception

von Guest (Gast)


Lesenswert?

Vllt. auch "^[0-9]{1},[0-9]{2}$"
Dann koennen sich nich vorn oder hinten extra Zeichen einschleichen.

von Johnny E. (electricjohnny)


Lesenswert?

dankeschön.

habe zunächst die Variante mit try & catch implementiert.

funktioniert wie ich mir das vorstelle.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.