A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© youloveme 初级黑马   /  2014-5-7 19:06  /  1182 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何把字符串中大写中文数字转换成阿拉伯数字。大写中文数字可限制在一到九百九十九之间。  

点评

认真看视频.里面真的讲的很详细  发表于 2014-5-7 20:30

3 个回复

倒序浏览
本帖最后由 NewDemo 于 2014-5-7 21:26 编辑

类似还有一个是阿拉伯数字转中文的,比较好做。你这个题目真心不简单额,这个是我写的代码,个人感觉太麻烦了,没有处理异常
  1. public static void main(String[] args) {
  2.                 // TODO Auto-generated method stub
  3.                 String s1 = "九百三十一";
  4.                 String s2 = "三十五";
  5.                 String s3 = "零";
  6.                 System.out.println(getNum(s1));
  7.                 System.out.println(getNum(s2));
  8.                 System.out.println(getNum(s3));
  9.         }
  10.         public static int getNum(String input){
  11.                 //查表法定义一到九定义的数字
  12.                 int len = input.length();
  13.                 String s ="零一二三四五六七八九十";
  14.                 int index0 = s.indexOf(input.charAt(0));
  15.                 int result = -1;
  16.                 if(len == 1)
  17.                         result = index0;
  18.                 if(len == 2){
  19.                         if(input.charAt(0) == '十')
  20.                                 result = s.indexOf(input.charAt(1));
  21.                         else if(input.charAt(1) == '十'){
  22.                                 result = index0*10;
  23.                         }
  24.                         else{
  25.                                 result = index0*100;
  26.                         }
  27.                 }
  28.                 if(len == 3){
  29.                         int index2 = s.indexOf(input.charAt(2));
  30.                         result = index0*10+index2;
  31.                 }
  32.                 if(len == 4){
  33.                         int index2 = s.indexOf(input.charAt(2));
  34.                         result = index0*100+index2*10;
  35.                 }
  36.                 if(len == 5){
  37.                         int index2 = s.indexOf(input.charAt(2));
  38.                         int index4 = s.indexOf(input.charAt(4));
  39.                         result = index0*100+index2*10+index4;
  40.                 }
  41.                 return result;

复制代码
这种算法题比较考思维,但是相当耗时间,所以适当为好。。另外推荐你看下这个帖子的算法比较简单
中文数字与阿拉伯数字互转
http://blog.csdn.net/yzy0612/article/details/5843069



评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1

查看全部评分

回复 使用道具 举报
做了好久,发现思路不对,太坑了,我i这种做法通过字符串长度分情况那就太麻烦了,代码太长了,中文读数字有很多读法,我想可不可以把中文字符串用'百''十'切割,这样应该可以,有时间再做做,希望老师能给点辛苦分

  1. import java.io.*;
  2. class Demo
  3. {
  4.         public static void main(String[] args)throws Exception
  5.         {
  6.                 System.out.println(getInt());
  7.         }
  8.         public static int getInt()throws Exception
  9.         {
  10.                 System.out.println("请出入零到九九九之间的中文");
  11.                 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
  12.                 String ss=bf.readLine();
  13.                 int sum=0;
  14.                 int num=0;
  15.                 int i=0;
  16.                 int len= ss.length();
  17.                 if (len<5&&len>=3)
  18.                         i=3;
  19.                 if(len<3&&len>=1)
  20.                         i=1;
  21.                                 for(int x=0;x<i;x+=2)
  22.                                 {
  23.                                         char ch = ss.charAt(x);
  24.                                         switch (ch)
  25.                                         {
  26.                                         case '一' : num=1*(int)Math.pow(10,(2-x/2));
  27.                                                 break;
  28.                                         case '二' : num=2*(int)Math.pow(10,(2-x/2));
  29.                                                 break;
  30.                                         case '三' : num=3*(int)Math.pow(10,(2-x/2));
  31.                                                 break;
  32.                                         case '四' : num=4*(int)Math.pow(10,(2-x/2));
  33.                                                 break;
  34.                                         case '五' : num=5*(int)Math.pow(10,(2-x/2));
  35.                                                 break;
  36.                                         case '六' : num=6*(int)Math.pow(10,(2-x/2));
  37.                                                 break;
  38.                                         case '七' : num=7*(int)Math.pow(10,(2-x/2));
  39.                                                 break;
  40.                                         case '八' : num=8*(int)Math.pow(10,(2-x/2));
  41.                                                 break;
  42.                                         case '九' : num=9*(int)Math.pow(10,(2-x/2));
  43.                                                 break;
  44.                                         case '零' : num=0*(int)Math.pow(10,(2-x/2));
  45.                                                 break;
  46.                                                 default:System.out.print("输入错误");
  47.                                        
  48.                                         }
  49.                                         sum+=num;



  50.                                 }
  51.                                 return sum;
  52.         }
  53.        
  54. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马