File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Java in General and the fly likes convert Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login

Win a copy of Java Interview Guide this week in the Jobs Discussion forum!
JavaRanch » Java Forums » Java » Java in General
Bookmark "convert "forty five" to "45"" Watch "convert "forty five" to "45"" New topic

convert "forty five" to "45"

Robin Clark
Ranch Hand

Joined: Dec 17, 2003
Posts: 81
I'm looking for an elegant way to convert one thru one hundred to "1" thru "100". The end result can either be an integer or a String representation of the value. Is there a clever way to accomplish this transformation or do I need to create a hashmap with 100 entries mapping the text to the number?
Many thanks!
Michael Morris
Ranch Hand

Joined: Jan 30, 2002
Posts: 3451
There may not be an elegant way to pull this off. You could use a combination of Maps and Regexes that employ capturing groups but anyway you slice it the logic gets nasty. For example English has numbers like eleven, twelve, fifteen, eighteen which would have to be handled with logic separate from teens like fourteen, sixteen, seventeen which could be handled in a similar manner to twenty one, twenty two, twenty three by dropping the white space (or dash) between the words. Then there would need to be logic that allowed one, two, three, etc to stand alone or to only follow twenty, thirty, forty, etc and reverse that for twenty, thirty, forty, etc. If you used two capturing groups for some of the teens, then you would need to check for those that do not comply as mentioned above. And one must be allowed to precede hundred.

Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius - and a lot of courage - to move in the opposite direction. - Ernst F. Schumacher
Tom Blough
Ranch Hand

Joined: Jul 31, 2003
Posts: 263
The best I could come up with was 27 nested "if" statements.

Tom Blough

Tom Blough<br /> <blockquote><font size="1" face="Verdana, Arial">quote:</font><hr>Cum catapultae proscriptae erunt tum soli proscripti catapultas habebunt.<hr></blockquote>
Ernest Friedman-Hill
author and iconoclast

Joined: Jul 08, 2003
Posts: 24199

Take Tom's solution, and put the string literals and the integers into a HashMap (you'd have to wrap the ints as Integer objects.) Then the main loop is just a single HashMap lookup:

[Jess in Action][AskingGoodQuestions]
I agree. Here's the link:
subject: convert "forty five" to "45"
It's not a secret anymore!