🚀 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 10:09
Czytanie +2.0E-3+5.0
#154276
Author: slawek
Date: Wed, 05 Oct 2016 10:09
39 lines
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