All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mygreen.cellformatter.callback.DBNum2 Maven / Gradle / Ivy

There is a newer version: 0.12
Show newest version
package com.github.mygreen.cellformatter.callback;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import com.github.mygreen.cellformatter.term.Term;

/**
 * DBNum2を処理する。
 * 

大字(だいじ)に変換する

* * @since 2.0 * @author T.TSUCHIE * */ public class DBNum2 extends DBNumBase { /** * インスタンスを取得する * @return {@link DBNum2}のインスタンス */ public static DBNum2 create() { return new DBNum2(); } /** * 言語ごとの変換処理のマップ */ private Map converters = new ConcurrentHashMap<>(); public DBNum2() { super("ja", "zh", "ko"); this.converters.put("ja", new JapaneseConverter()); this.converters.put("zh", new ChineseConverter()); this.converters.put("ko", new KoreanConverter()); } @Override public String call(Object data, String value, Locale locale, Term term) { final String language = locale.getLanguage().toLowerCase(); return converters.get(language).convert(value, is4YearTerm(term)); } /** * 日本語の場合の変換処理 * * @since 2.0 * @author T.TSUCHIE * */ public static class JapaneseConverter extends KansujiConverter { public JapaneseConverter() { // 数字のマップ setNumMap(new String[] { "〇", "壱", "弐", "参", "四", "伍", "六", "七", "八", "九" }); // 10^4桁ごと単位のマップ setDigits10Map(new String[] { "", // 10^0 "萬", // 10^4 "億", // 10^8 "兆", // 10^12 "京" // 10^16 }); // 4桁の単位のマップ setDigits4Map(new String[] { "", "拾", "百", "阡" }); } @Override protected String replace4Digits(final String value) { // 桁ごとに変換を行う。 final int length = value.length(); final List digits = new ArrayList<>(); for(int i=0; i < length; i++) { // 下の桁から処理する final char c = value.charAt(length-i-1); if(c == '0') { continue; } // 12の場合も、「壱拾弐」と1を省略さない。 String item = replaceSimple(String.valueOf(c)) + digits4Map[i]; digits.add(item); } /* * 文字列に直す。 * ・桁数が逆順になっているので、戻し結合する。 */ Collections.reverse(digits); StringBuilder sb = new StringBuilder(); for(String item : digits) { sb.append(item); } return sb.toString(); } } /** * 中国語の場合の変換処理 * * @since 2.0 * @author T.TSUCHIE * */ public static class ChineseConverter extends DBNum1.ChineseConverter { public ChineseConverter() { // 数字のマップ setNumMap(new String[] { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }); // 10^4桁ごと単位のマップ setDigits10Map(new String[] { "", // 10^0 "万", // 10^4 日本語の万(0x969c)とは異なる、万(0x8DC0) "亿", // 10^8 "兆", // 10^12 "京" // 10^16 }); // 4桁の単位のマップ setDigits4Map(new String[] { "", "拾", "佰", "仟" }); } } /** * 韓国国の場合の変換処理 * * @since 2.0 * @author T.TSUCHIE * */ public static class KoreanConverter extends DBNum1.KoreanConverter { public KoreanConverter() { // 数字のマップ setNumMap(new String[] { "零", "壹", "貳", "參", "四", "伍", "六", "七", "八", "九" }); // 10^4桁ごと単位のマップ setDigits10Map(new String[] { "", // 10^0 "萬", // 10^4 "億", // 10^8 "兆", // 10^12 "京" // 10^16 }); // 4桁の単位のマップ setDigits4Map(new String[] { "", "拾", "百", "阡" }); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy