汉字转换为阿拉伯数字,一百三十四亿一千零二十三万六千六百零九,求转换
汉字转换为阿拉伯数字,一百三十四亿一千零二十三万六千六百零九,求转换有什么好的方法吗?
汉字 转换 阿拉伯数字 --------------------编程问答-------------------- 最终应该转为这样:13410236609,有什么好方法吗? --------------------编程问答-------------------- 先倒叙,然后由左到右按照 十 百 千 万 亿 作为关键字截取,截取得到的字符串内部再截取计算一次,实际上就是一个递归 --------------------编程问答-------------------- 不用这么麻烦吧,先定义对应关系
零对应0
一对应1
二对应2,如此类推
从左到右一个一个汉字扫描,遇到什么中文,就把什么数字写入字符串,到最后的话,如果以十结尾,则在结尾加1个0,百结尾加2个,如此类推即可 --------------------编程问答--------------------
你这样的话,1002,汉字是一千零二,你转换出来就是102,要不你写个算法出来 --------------------编程问答-------------------- public class Test {
/**
* @param args
*/
public static void main(String[] args) {
String number = "一百三十四亿一千零二十三万六千六百零九";
char[] num = new char[number.length()];
StringBuffer sb =new StringBuffer();
//截取字符串
for(int i =0;i<number.length();i++){
num[i]=number.charAt(i);
}
String c="";
//替换字符
for(int i=0;i<num.length;i++){
switch(num[i]){
case '一':
c = "1";
sb.append(c);
break;
case '二':
c = "2";
sb.append(c);
break;
case '三':
c = "3";
sb.append(c);
break;
case '四':
c = "4";
sb.append(c);
break;
case '五':
c = "5";
sb.append(c);
break;
case '六':
c = "6";
sb.append(c);
break;
case '七':
c = "7";
sb.append(c);
break;
case '八':
c = "8";
sb.append(c);
break;
case '九':
c = "9";
sb.append(c);
break;
}
}
System.out.println(sb.toString());
}
} --------------------编程问答--------------------
大哥,不对,执行结果为:134123669
--------------------编程问答--------------------
package number_converter;--------------------编程问答--------------------
//汉字转换为阿拉伯数字
//一百三十四亿一千零二十三万六千六百零九
//最终应该转为这样:13410236609
public class MyConverter2 {
public static void main(String[] args) {
long d=convert("一百三十四亿一千零二十三万六千六百零九");
System.out.println(d);
}
public static long convert(String s){
String [] s1=s.split("亿");
long num=restore(s1[0]) *100000000L;
String [] s2=s1[1].split("万");
num=restore(s2[0]) *10000L +num;
num=num+restore(s2[1]);
return num;
}
public static int convertNumber(char c){
int num=0;
switch(c){
case '零': num= 0; break;
case '一': num= 1; break;
case '二': num= 2; break;
case '三': num= 3; break;
case '四': num= 4; break;
case '五': num= 5; break;
case '六': num= 6; break;
case '七': num= 7; break;
case '八': num= 8; break;
case '九': num= 9; break;
}
return num;
}
// 比如 一千三百五十1 还原为1351
public static int restore(String s){
char [] array=s.toCharArray();
int num=0;
for (int i=0; i<array.length-1; i++){
if (array[i] != '零' && array[i+1]=='千' ){
num=convertNumber( array[i] )*1000;
}else
if (array[i] != '零' && array[i+1]=='百' ){
num=num + convertNumber( array[i] )*100;
}else
if (array[i] != '零' && array[i+1]=='十' ){
num=num + convertNumber( array[i] )*10;
}
}
return num+convertNumber(array[array.length-1]);
}
}
--------------------编程问答--------------------
import java.util.regex.Pattern;
public class MoneyTest {
public static long parse(String money) {
long result = 0;
char c = 0;
boolean flag = Pattern.matches("^.*亿.*万.*$", money);
for (int i = 0; i < money.length(); i++) {
switch (money.charAt(i)) {
case '零':
break;
case '一':
c = 1;
break;
case '二':
c = 2;
break;
case '三':
c = 3;
break;
case '四':
c = 4;
break;
case '五':
c = 5;
break;
case '六':
c = 6;
break;
case '七':
c = 7;
break;
case '八':
c = 8;
break;
case '九':
c = 9;
break;
case '十':
result += (c == 0 ? 10 : c * 10);
c = 0;
break;
case '百':
result += c * 100;
c = 0;
break;
case '千':
result += c * 1000;
c = 0;
break;
case '万':
result = (result + c) * 10000;
c = 0;
break;
case '亿':
if (flag){
result = (result + c) * 10000;
}else{
result = (result + c) * 100000000;
}
c = 0;
break;
default:
c = 0;
}
}
if (c != 0)
result += c;
return result;
}
public static void main(String args[]) {
System.out.println(MoneyTest.parse("一百三十四亿一千零二十三万六千六百零九"));
}
}
这还有问题的哟!!
看看这个
long d = convert("一十七万一百三十四亿一千零二十三万六千六百零九");
System.out.println(d);
long l = convert("一十七万亿一百三十四亿一千零二十三万六千六百零九");
System.out.println(l);
输出
14410236609--------------------编程问答--------------------
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at com.test.ConverterNumber.convert(ConverterNumber.java:30)
at com.test.ConverterNumber.main(ConverterNumber.java:19)
这个还比较好点,但不知道万亿是该第一个写法还是第二个写法呢?我现在搞晕了,看看跑的结果:
System.out.println(MoneyTest.parse("一十七万亿一百三十四亿一千零二十三万六千六百零九"));
System.out.println(MoneyTest.parse("一十七万一百三十四亿一千零二十三万六千六百零九"));
170000013410236609
17013410236609
第二条语句写法能出正确的结果。 --------------------编程问答--------------------
引用错了,该引用的是7楼的lz代码...... --------------------编程问答-------------------- 大神能不能总结一下啊
有没有别的方法? --------------------编程问答--------------------
--------------------编程问答-------------------- 很简单呀,先从右到左把个,十,百,千,万这样写上去,再在相对应的位置填上阿拉伯数字就行了。
public static void main(String[] args) {
BigInteger d=convert("一千二百五十一万零一亿一千二百五十八万零一百三十四亿八千零三万零一");
System.out.println(d);
}
public static BigInteger convert(String s){
String [] s1=s.split("亿");
BigInteger num=new BigInteger("0");
BigInteger n3 = new BigInteger("0");
for(int i =0;i<s1.length;i++){
String[] s2 = s1[i].split("万");
for(int j=0;j<s2.length;j++){
for(int h=0;h<=j;h++){
if(j!=s2.length-1){
n3=new BigInteger(restore(s2[j])*10000+"");
}else{
n3=new BigInteger(restore(s2[j])+"");
}
}
for(int p=i;p<s1.length;p++){
if(p!=s1.length-1){
n3=n3.multiply(new BigInteger("100000000"));
}
}
num = num.add(n3);
}
}
return num;
}
补充:Java , Java EE