今天,有个同学问到如何将中文大写数字转为阿拉伯数字的方法,利用中午休息的时间,写了一下,没经过严格测试,但是基本的应该可以转换
这种转换在网上应该有其他的同学实现过了,只是自己懒没有去找,大家如果有更好的的实现记得共享啊。。。^_^
------------------------------------
/*
* Created on 2005-3-25
*
*/
package net.rick.java.pkg;
import java.util.HashMap;
/**
* @author rick
*
*/
public class ChangeGBToNO {
private final String[] GBNOStr = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
private final String[] GBUnitStr_1 = { "千", "佰", "拾" };//单位
private final String[] GBUnitStr_2 = { "亿", "万" };//order
private final HashMap GBNOMap = new HashMap();
private final HashMap GBUnitMap = new HashMap();
public ChangeGBToNO() {
for (int n = 0; n < GBNOStr.length; n++) {
GBNOMap.put(GBNOStr[n], n + "");
}
GBUnitMap.put("拾", 10 + "");
GBUnitMap.put("佰", 100 + "");
GBUnitMap.put("千", 1000 + "");
GBUnitMap.put("万", 10000 + "");
GBUnitMap.put("亿", 100000000 + "");
GBUnitMap.put("仟", 1000 + "");
}
public long change(String src) {
//贰亿陆仟壹万肆千柒佰伍拾捌 260014750
long result = 0;
int pos = 0;
for (int n = GBUnitStr_2.length - 1; n >= 0; n--) {
if (src.indexOf(GBUnitStr_2[n]) < 0)
src = GBNOStr[0] + GBUnitStr_2[n] + src;
}
String[] block = src.split("[" + GBUnitStr_2[0] + GBUnitStr_2[1] + "]");
for (int n = 0; n < block.length - 1; n++) {
result += deal(block[n])
* (new Integer((String) GBUnitMap.get(GBUnitStr_2[n])).intvalue());
}
result += deal(block[2]);
return result;
}
private long deal(String str) {
//肆千柒佰伍拾捌
if (str == null || str.equals("")) {
return 0;
}
int result = 0;
int pos = 0;
//deal 捌
if (!GBUnitMap.containsKey(str.substring(str.length() - 1))) {
result += new Integer((String) GBNOMap.get(str.substring(str.length() - 1))).intvalue();
}
//
for (int n = 0; n < str.length(); n++) {
String tmp = str.substring(n, n + 1);
if (GBUnitMap.containsKey(tmp)) {
result += (new Integer((String) GBNOMap.get(str.substring(n - 1, n))).intvalue())
* (new Integer((String) GBUnitMap.get(tmp)).intvalue());
}
}
return result;
}
public static void main(String[] args) {
ChangeGBToNO test = new ChangeGBToNO();
System.out.println("贰亿陆仟壹万肆千柒佰伍拾捌="+test.change("贰亿陆仟壹万肆千柒佰伍拾捌"));
}
}