🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.java
1 messages
1 total messages Started by "slawek" Wed, 05 Oct 2016 12:09
Czytanie +2.0E-3+5.0
#152087
Author: "slawek"
Date: Wed, 05 Oct 2016 12:09
39 lines
1312 bytes
Jak najpro¶ciej przeczytaæ z ³añcucha takiego jak str = "+2.0E+3+5.0" trzy
rzeczy: liczbê 2000.0, znak plus, liczbê 5.0 ?

Czyli jak w Javie wygl±da ekwiwalent sscanf(str, "%lf%c%lf", &a, &op, &b);
?

Dowcip w tym, ¿e:

1. java.util.Scanner robi nextDouble() najpierw tokenizuj±c (a tu nie ma
separatora pomiêdzy +2.0E+3 i plusem); daje radê z "+2.0E+3 + 5.0", ale bez
spacji siê wyk³ada.
1b. U¿ycie znaku plus jako ogranicznika dla Scanner jest bezsensu: rozdzieli
na "2.0E", "3", "5.0". Podobnie zakoñczy siê u¿ycie split'ów;
2. Double.parseDouble() bierze ca³o¶æ i nie zrozumie ¿e w str na pocz±tku
jest liczba double (nie da wskazówek, gdzie koñczy siê zapis pierwszej
double) i rzuci wyj±tkiem; owszem, mo¿na by³oby próbowaæ najpierw z ca³ym
³añcuchem, potem urywaæ jeden znak na koñcu i tak a¿ do skutku, ale jakie¶
takie to (nieefektywne gdy str jest d³ugi).
3. Czytanie po jednym znaku i robienie w³asnego parsera jest uci±¿liwe;
4. Wyra¿enia regularne mog³yby byæ pomocne, ale znowu - trochê s±
przyciê¿kie.

Czy jest ³atwa i przyjemna metoda czytania w Javie podobna do scanf z C, tj.
taka która z ci±gu znaków czyta taki najd³u¿szy (od pocz±tku) który daje siê
rozumieæ jako zapis liczby zmiennoprzecinkowej i rozdziela to co ju¿
przeczytane, od tego co jeszcze przeczytaæ?













Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads