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
Author: "slawek"
Date: Wed, 05 Oct 2016 12:09
Date: Wed, 05 Oct 2016 12:09
39 lines
1312 bytes
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