- 締切済み
数字を読みに変換する方法について
Javaにおいて、数字を読みに変換する方法をどなたかご存知ありませんか? 例えば、数字の 117 を one hundred and seventeen というように変換したいのです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- arakororin
- ベストアンサー率39% (80/205)
頭の体操として面白そうだったのでちょっと作ってみました。英語には興味ないので漢数字に変換するものを作りました。まぁつくりが分かればいいと思うので。 なんにせよ、結構泥臭い地道な作業になることは間違いないと思います。Java5.0以上で動作します。 /* * 作成日: 2006/07/12 * */ package ちょっとしたツール; /** */ public class 数字を漢数字に2 { static String[] 漢数字 = { "", "一", "二", "三", "四", "五", "六", "七", "八", "九" }; static String[] 漢数字桁1 = { "", "十", "百", "千" }; static String[] 漢数字桁2 = { "", "万", "億", "兆", "京" }; public static void main(String[] args) { int 変換したい数値 = 31234450; String 漢数字値 = ""; if (変換したい数値 == 0) { System.out.println("零"); return; } int 変換したい数値の桁数 = (int) StrictMath.log10(変換したい数値); for (int i = 変換したい数値の桁数; i >= 0; i--) { int 注目する桁 = (int) Math.pow(10, i); int 注目する桁の数字 = 変換したい数値 / 注目する桁; 漢数字値 = 漢数字値 + 漢数字[注目する桁の数字]; if (i % 4 != 0) { 漢数字値 = 漢数字値 + 漢数字桁1[i % 4]; } else { 漢数字値 = 漢数字値 + 漢数字桁2[i / 4]; } 変換したい数値 = 変換したい数値 - 注目する桁の数字 * 注目する桁; } System.out.println(漢数字値); } }
- meenie
- ベストアンサー率44% (40/90)
ぱっと思いついたアプローチは桁数と数字の対応表を作成しておき、入力文字列を解析、変換という流れです。 {"","one","two","three",・・・,"nine"} 3n-2桁目、3n桁目はここから選び変換 {"","","twenty","thirty",・・・,"ninety"} 3n-1桁目はここから選び変換 {"ten","eleven","twelve","thirteen","fourteen",・・・,"nineteen"} 3n-1桁目が1の時はこちらから選ぶ。 3n桁はhundredをつける 4桁ならthousand、7桁ならmillion、・・・ 1. 入力された数字列をStringで逆順に格納(1234なら4321) 2. 一文字取得する。 桁数++ (4) 3. 次の文字があるので取得。桁数++ (43) 4. 次の文字があるので取得。桁数++ (432) 5. 3つたまったら解析、変換 1桁目が4なので fore 5.1 2桁目が3なので thirty 5.2 3桁目が2なので two。桁数が3なので hundred を付加。 5.3 併せて two hundred thirty fore の文字列を保存。 6. 2に戻り、1文字取得。桁数++ (1) 7. 次の文字が無いので解析、変換 1桁目が1なのでone。桁数が4なので thousand を付加。 8. one thousand two hundred thirty fore の文字列を保存して出力。
お礼
なるほど、処理の流れがよく分かりました。 丁寧な回答どうもありがとうございました。