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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁永奇 中级黑马   /  2013-2-23 02:03  /  1567 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

使用Calendar输出日期,用汉字输出星期或者月份,可以建立一个String数组,比如"String[] str1 = { "星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天" };"
可是,如果要输出某一年的汉字表示形式,怎么办呢?

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
本帖最后由 陈圳 于 2013-2-23 08:59 编辑

          public void year(int year)
          {
                 String[] num={"零","一","二","三","四","五","六","七","八","九"};
                int[] nums=new int[4];
                String newyear="";
                String toYear=Integer.toString(year);  //将year年转换成字符串
                char[] c_num=toYear.toCharArray();     //将year字符串转成字符数组
                for(int i=0;i<nums.length;i++)
                {
                        nums=(int)(c_num)-48;             //将字符数组转成单个数,其实是String输出的角标,char类型转int型后,值发生改变-48
                        //newyear+=num[nums];             //将num字符串的角标连起来.组成汉字年份.
                        //System.out.println(num[nums]);
                        newyear+=num[nums];
                }
                System.out.println(newyear);

          }
我实现的有点麻烦啊,但是实现了.通过字符串转换成字符,再将字符转成单个角标,用num把各个角标值获取,然后用一个新的字符串把他们连起来.

这个将年份转成单个int型数组的过程有些麻烦,我想可以通过千位:year/1000 这种方式获得各个位数.不用组成数组,直接在循环里面赋给一个String内,就可以获得.你试下.
打印结果:二零零四

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我把第二种方式做出来了.代码如下:
package Day12;
class Demo
{
        public int[] getNum(int year)  //获取一个数值每一位的方法
        {
                int arr[]=new int[4];
                for(int i=(arr.length-1),x=10;i>=0;i--)
                {
                        arr[i]=year%x;   //取一个整数的每一位数的方法 %10得低位,从个位开始把值赋给arr[i],
                        year/=x;//            除10使数减少.因为最低位已经取得了.
                }
                return arr;
        }
        public static String newYear(int year)  //实现汉字打印年份的第一种方法.
        {
                String[] num={"零","一","二","三","四","五","六","七","八","九"};
                Demo d=new Demo();
                String newyear="";
                int arr[]=d.getNum(year);
                for(int i=0;i<arr.length;i++)
                        newyear+=num[arr[i]];
                return newyear;
        }
        public static String getYear(int year) //实现汉化打印年份的第二种,通过String类与字符数组的转换获得
        {
                String[] num={"零","一","二","三","四","五","六","七","八","九"};
                int[] nums=new int[4];
                String newyear="";
                String toYear=Integer.toString(year);  //将year年转换成字符串
                char[] c_num=toYear.toCharArray();     //将year字符串转成字符数组
                for(int i=0;i<nums.length;i++)
                {
                        nums[i]=(int)(c_num[i])-48;             //将字符数组转成单个数,其实是String输出的角标,char类型转int型后,值发生改变-48
                        //newyear+=num[nums[i]];             //将num字符串的角标连起来.组成汉字年份.
                        //System.out.println(num[nums[i]]);
                        newyear+=num[nums[i]];
                }
                return newyear;
        }
        public static void main(String[] args)
        {
                System.out.println(getYear(2012));
                System.out.println(newYear(2004));
        }
}
打印结果:
二零一二
二零零四

回复 使用道具 举报
就按照楼上的思路来是对的,你可以把那个把数字数组转换成文字的方法封装成一个方法,然后直接返回一个字符串就成了。比如:
  1. public String int2string(int[] numbers)
  2. {}
复制代码
然后按照楼上的思路把数组中的数据分别转换成中文并加入都String中就行了,使用的时候只用调用这个方法即可。
  1. //又见伪代码了,呵呵,
  2. public String int2string(int[] numbers)
  3. {
  4. String retVal = "";
  5. String[] nums ={"零","一","二","三","四","五","六","七","八","九"};
  6. for(int i = 0 ; i < numbers.length ; i++)
  7. {
  8. switch(nubers[i])
  9. {
  10. case 0:
  11.     retVal +=nums[0];
  12. ....0-9都case一下;
  13. }
  14. }
  15. return retVal;
  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
/**
  *        获取当前时间,   格式为:   yyyy-mm-dd   hh-mm-ss
  *        @return   String   当前时间
  */
public   static   String   getNow()
{
return   DateFormat.getDateTimeInstance(2,   2,   getLocale()).format(   new   java.util.Date()   );
}

/**
  *        获取当前时间,   格式为:   yyyy年mm月dd日   上午/下午hh时mm分ss秒
  *        @return   String   当前时间
  */
public   static   String   getNowLong()
{
return   DateFormat.getDateTimeInstance(DateFormat.LONG,   DateFormat.LONG,   getLocale()).format(   new   java.util.Date()   );
}

/**
  *        获取当前时间(精确到毫秒),   格式为:   yyyy-mm-dd   hh:mm:ss.nnn
  *        @return   String   当前时间
  */
public   static   String   getNowNano()
{       
return   new   java.sql.Timestamp(   System.currentTimeMillis()   ).toString();
}

/**
  *        获取指定的Locale对象
  *        @return   Locale   返回Locale对象
  */
private   static   Locale   getLocale()
{
return   Locale.CHINESE;
}

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马