プロが教える店舗&オフィスのセキュリティ対策術

Javaにおいて、数字を読みに変換する方法をどなたかご存知ありませんか?
例えば、数字の 117 を one hundred and seventeen というように変換したいのです。
よろしくお願いします。

A 回答 (2件)

頭の体操として面白そうだったのでちょっと作ってみました。

英語には興味ないので漢数字に変換するものを作りました。まぁつくりが分かればいいと思うので。

なんにせよ、結構泥臭い地道な作業になることは間違いないと思います。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(漢数字値);

}
}
    • good
    • 0

ぱっと思いついたアプローチは桁数と数字の対応表を作成しておき、入力文字列を解析、変換という流れです。

{"","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 の文字列を保存して出力。
    • good
    • 0
この回答へのお礼

なるほど、処理の流れがよく分かりました。
丁寧な回答どうもありがとうございました。

お礼日時:2006/07/11 14:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A