1、正则表达式的处理工具类
public class RexUtils { public static String and(String... rules) { StringBuffer sb = new StringBuffer(); for (String rule : rules) { sb.append("(").append(rule).append(")"); } return sb.toString(); } public static String or(String... rules) { StringBuffer sb = new StringBuffer(); for (String rule : rules) { if (sb.length() != 0) { sb.append("|"); } sb.append("(").append(rule).append(")"); } return sb.toString(); } public static String more(String rule) { StringBuffer sb = new StringBuffer(); sb.append("[").append(rule).append("]+"); return sb.toString(); } public static String nullOrMore(String rule) { StringBuffer sb = new StringBuffer(); sb.append("[").append(rule).append("]*"); return sb.toString(); } public static String getFind(String data, String rule) { Matcher m = Pattern.compile(rule).matcher(data); StringBuffer sb = new StringBuffer(); while (m.find()) { sb.append(String.valueOf(m.group())); return sb.toString(); } return ""; } }2、使用ChineseNumberUtil调用方法获取阿拉伯数字
/** * 从字符串中获取中文数字并转换为阿拉伯数字 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumberUtil { /** * @param value 需要转换的字符串 * @return */ public static long getNumbers(String value) { value = value.replace("零", ""); ChineseNumber1x chineseNumber1x = new ChineseNumber1x(value); ChineseNumber10000 chineseNumber10000 = new ChineseNumber10000(value = value.replace(chineseNumber1x.getData(), "")); ChineseNumber1000 chineseNumber1000 = new ChineseNumber1000(value = value.replace(chineseNumber10000.getData(), "")); ChineseNumber100 chineseNumber100 = new ChineseNumber100(value = value.replace(chineseNumber1000.getData(), "")); ChineseNumber10 chineseNumber10 = new ChineseNumber10(value = value.replace(chineseNumber100.getData(), "")); ChineseNumber1 chineseNumber1 = new ChineseNumber1(value.replace(chineseNumber10.getData(), "")); long number1x = chineseNumber1x.getNumber(); long number10000 = chineseNumber10000.getNumber(); long number1000 = chineseNumber1000.getNumber(); long number100 = chineseNumber100.getNumber(); long number10 = chineseNumber10.getNumber(); long number1 = chineseNumber1.getNumber(); long total = number1 + number10 + number100 + number1000 + number10000 + number1x; return total; } }3、辅助类:
1>1>1>1>1>
/** * 处理个位数 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumber1 { public final static String number0 = "零"; public final static String number1 = "一|壹"; public final static String number2 = "二|两|貳|贰"; public final static String number3 = "叁|參|三"; public final static String number4 = "肆|四"; public final static String number5 = "五|伍"; public final static String number6 = "陸|陆|六"; public final static String number7 = "柒|七"; public final static String number8 = "捌|八"; public final static String number9 = "九|玖"; private long number = 0; public ChineseNumber1() { } public ChineseNumber1(String data) { if (TextUtils.isEmpty(data)) { return; } if (!TextUtils.isEmpty(RexUtils.getFind(data, number0))) { number = 0; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number1))) { number = 1; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number2))) { number = 2; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number3))) { number = 3; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number4))) { number = 4; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number5))) { number = 5; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number6))) { number = 6; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number7))) { number = 7; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number8))) { number = 8; } else if (!TextUtils.isEmpty(RexUtils.getFind(data, number9))) { number = 9; } } public long getNumber() { return number; } }
2>2>2>
/** * 处理十位数 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumber10 { public final static String number10 = "十|拾"; private final long unit = 10; private final String rex = RexUtils.and(RexUtils.nullOrMore(RexUtils.or("", ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3, ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9)), number10); private ChineseNumber1 number = new ChineseNumber1(); private String mData = ""; public ChineseNumber10(String data) { mData = RexUtils.getFind(data, rex); if (!TextUtils.isEmpty(mData)) { String numberData = String.valueOf(mData.subSequence(0, mData.length() - 1)); if (TextUtils.isEmpty(numberData)) { numberData = "一"; } number = new ChineseNumber1(numberData); } } public ChineseNumber10() { number = new ChineseNumber1(); } public long getNumber() { return number.getNumber() * unit; } public String getData() { return mData; } }3>3>3>
/** * 处理百位数 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumber100 { public final static String number100 = "佰|百"; private final long unit = 100; private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3, ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9, ChineseNumber10.number10)), number100); private ChineseNumber1 number = new ChineseNumber1(); private String mData = ""; public ChineseNumber100(String data) { mData = RexUtils.getFind(data, rex); if (!TextUtils.isEmpty(mData)) { number = new ChineseNumber1(String.valueOf(mData.subSequence(0, mData.length() - 1))); } } public ChineseNumber100() { number = new ChineseNumber1(); } public long getNumber() { return number.getNumber() * unit; } public String getData() { return mData; } }4>4>4>
/** * 处理千位数 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumber1000 { private final long unit = 1000; public final static String number1000 = "千|仟"; private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3, ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9, ChineseNumber10.number10, ChineseNumber100.number100)), number1000); private ChineseNumber1 number = new ChineseNumber1(); private String mData = ""; public ChineseNumber1000(String data) { mData = RexUtils.getFind(data, rex); if (!TextUtils.isEmpty(mData)) { number = new ChineseNumber1(String.valueOf(mData.subSequence(0, mData.length() - 1))); } } public ChineseNumber1000() { number = new ChineseNumber1(); } public long getNumber() { return number.getNumber() * unit; } public String getData() { return mData; } }5>5>5>
/** * 处理万位数 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumber10000 { private final long unit = 10000; public final static String number10000 = "万|萬"; private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3, ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9, ChineseNumber10.number10, ChineseNumber100.number100, ChineseNumber1000.number1000)), number10000); private ChineseNumber1000 number1000 = new ChineseNumber1000(); private ChineseNumber100 number100 = new ChineseNumber100(); private ChineseNumber10 number10 = new ChineseNumber10(); private ChineseNumber1 number1 = new ChineseNumber1(); private String mData = ""; public ChineseNumber10000() { number1000 = new ChineseNumber1000(); number100 = new ChineseNumber100(); number10 = new ChineseNumber10(); number1 = new ChineseNumber1(); } public ChineseNumber10000(String data) { mData = RexUtils.getFind(data, rex); if (!TextUtils.isEmpty(mData)) { String numberData = String.valueOf(mData.subSequence(0, mData.length() - 1)); number1000 = new ChineseNumber1000(numberData); number100 = new ChineseNumber100(numberData = numberData.replace(number1000.getData(), "")); number10 = new ChineseNumber10(numberData = numberData.replace(number100.getData(), "")); number1 = new ChineseNumber1(numberData.replace(number10.getData(), "")); } } public long getNumber() { long number = number1000.getNumber() + number100.getNumber() + number10.getNumber() + number1.getNumber(); return number * unit; } public String getData() { return mData; } }6>6>6>
/** * 处理亿位数 * Created by huomengyuan on 2017/4/14. */ public class ChineseNumber1x { public final static String number1x = "億|亿"; private final long unit = 100000000; private final String rex = RexUtils.and(RexUtils.more(RexUtils.or(ChineseNumber1.number0, ChineseNumber1.number1, ChineseNumber1.number2, ChineseNumber1.number3, ChineseNumber1.number4, ChineseNumber1.number5, ChineseNumber1.number6, ChineseNumber1.number7, ChineseNumber1.number8, ChineseNumber1.number9, ChineseNumber10.number10, ChineseNumber100.number100, ChineseNumber1000.number1000, ChineseNumber10000.number10000)), number1x); private ChineseNumber10000 number10000 = new ChineseNumber10000(); private ChineseNumber1000 number1000 = new ChineseNumber1000(); private ChineseNumber100 number100 = new ChineseNumber100(); private ChineseNumber10 number10 = new ChineseNumber10(); private ChineseNumber1 number1 = new ChineseNumber1(); private String mData = ""; public ChineseNumber1x(String data) { mData = RexUtils.getFind(data, rex); if (!TextUtils.isEmpty(mData)) { String numberData = String.valueOf(mData.subSequence(0, mData.length() - 1)); number10000 = new ChineseNumber10000(numberData); number1000 = new ChineseNumber1000(numberData = numberData.replace(number10000.getData(), "")); number100 = new ChineseNumber100(numberData = numberData.replace(number1000.getData(), "")); number10 = new ChineseNumber10(numberData = numberData.replace(number100.getData(), "")); number1 = new ChineseNumber1(numberData.replace(number10.getData(), "")); } } public long getNumber() { long number = number10000.getNumber() + number1000.getNumber() + number100.getNumber() + number10.getNumber() + number1.getNumber(); return number * unit; } public String getData() { return mData; } }