🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.java
Article #154276

Czytanie +2.0E-3+5.0

#154276
From: 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ć?












 
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-mail

Show 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