Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Czytanie +2.0E-3+5.0

15 views
Skip to first unread message

slawek

unread,
Oct 5, 2016, 6:08:31 AM10/5/16
to
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ć?














0 new messages