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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Jayshun 中级黑马   /  2014-11-8 20:28  /  2356 人查看  /  10 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

public static String toChinese(String str){
                String Ch="零一二三四五六七八九";
                StringBuilder sb=new StringBuilder(str.length());
                for(int i=0;i<str.length();i++){
                        sb.append(Ch.charAt(str.charAt(i)-'0'));//为什么这里要减字符0
                }
求解谢谢11

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

10 个回复

倒序浏览
这段代码要实现什么功能?
回复 使用道具 举报
charAt(i)返回指定索引处的 char 值,如果不-'0'会出现字符串越界异常,当你调用这个方法并传一个1进去的时候如果不-'0',那么Ch.charAt(str.charAt(i)-'0')就相当于Ch.charAt('1'),而'1'在ascii码表中的值为49,而 String Ch="零一二三四五六七八九";的最大下标为9,所以会出现越界异常,当-'0'后的运算结果为1,所以会将字符串中的一追加到缓冲区,这时你再输出结果就会把你输入的1变成一了
回复 使用道具 举报
这应该是把数字转成汉字的一个方法。
String的charAt(int i)方法返回值是char类型,传入的是int类型。
str.charAt(i)返回的是char类型,所以-减去一个'0'可以等到一个int类型的数字。
回复 使用道具 举报
String的charAt(int i)方法返回值是char类型,传入的是int类型。
str.charAt(i)返回的是char类型,但是会自动转换成int类型,
为什么减去'0',就是为了得到数字字符与'0'之间的间距,就是角标,
然后角标就可以跟 String Ch="零一二三四五六七八九"  角标的位置对应起来了;
回复 使用道具 举报
hailong 发表于 2014-11-8 23:43
charAt(i)返回指定索引处的 char 值,如果不-'0'会出现字符串越界异常,当你调用这个方法并传一个1进去的时 ...

那么‘0’在ascii码表中的值为40,是吗?
回复 使用道具 举报
ye361571404 发表于 2014-11-9 00:08
那么‘0’在ascii码表中的值为40,是吗?

0是48      0~9是48~57,A~Z是65~90,a~z是97~122
回复 使用道具 举报
谢谢各位的指导
回复 使用道具 举报
为了避免越界
回复 使用道具 举报
字符0-9减字符0就能得到0-9的数字啊,然后数字当下标去取字符串“零至九“,这样就实现了中文格式的转换,但你的程序不完整,少了单位。
回复 使用道具 举报
由于输入的是字符串(或字符)。
所以减掉'0'的ASCII码就可以简单的转为整数。
当然,假如使用Integer.parseInt(str)也是可以的。
(( ﹁ ﹁ ) ~→)但是,长度会变得有限制,只能在int类型的区间中使用。
因此使用str.charAt(i)可以得到录入的某个字符的ASCII,减掉'0'的ASCII就变成了整数。假如录入的是'0'到'9'之间的字符,就会变成0-9之间的数字。由此可以直接从ch变量中提取所需要的汉字表现形式。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马