slawek
unread,Oct 5, 2016, 6:08:31 AM10/5/16You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
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ć?