Article View: pl.comp.lang.java
Article #154276Czytanie +2.0E-3+5.0
From: 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ć?
Technical Details
Message-ID:
<57f4d11d$0$5147$65785112@news.neostrada.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mailShow Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!agh.edu.pl!news.agh.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin1!goblin.stu.neva.ru!newsfeed.neostrada.pl!unt-exc-01.news.neostrada.pl!unt-spo-a-01.news.neostrada.pl!news.neostrada.pl.POSTED!not-for-mail From: "slawek" <slawek@host.pl> Newsgroups: pl.comp.lang.java Subject: Czytanie +2.0E-3+5.0 Date: Wed, 5 Oct 2016 12:09:22 +0200 MIME-Version: 1.0 X-Priority: 3 X-MSMail-Priority: Normal Importance: Normal X-Newsreader: Microsoft Windows Live Mail 14.0.8117.416 X-MimeOLE: Produced By Microsoft MimeOLE V14.0.8117.416 Lines: 40 Message-ID: <57f4d11d$0$5147$65785112@news.neostrada.pl> Organization: Telekomunikacja Polska NNTP-Posting-Host: 79.184.230.7 X-Trace: 1475662109 unt-rea-a-01.news.neostrada.pl 5147 79.184.230.7:28883 X-Complaints-To: abuse@news.neostrada.pl Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit