Thread View: pl.comp.lang.java
1 messages
1 total messages
Started by slawek
Wed, 05 Oct 2016 10:09
Czytanie +2.0E-3+5.0
Author: slawek
Date: Wed, 05 Oct 2016 10:09
Date: Wed, 05 Oct 2016 10:09
39 lines
2324 bytes
2324 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