java疯狂讲义第四章练习题

1.按照取子字符串,中文占两个字节,英文占一个字节

package practice;

public class substring{
    public static String getSubstring(String s, int start, int end){
        String  r = new String(s);
        String result = "";
        int leneed = end - start; 
        int length = 0;
        int i = start;
        if(r.length() == r.getBytes().length)
            return s.substring(start, end);
        else{
            while(i<end && length <= leneed){
                if(isHan(r.charAt(i))){
                    length += 2;
                }
                else{
                    length += 1;
                }
                result = result + r.charAt(i);
                i += 1;
            }
            return result;
        }

    }

        public static boolean isHan(char a){
         return a >= 0x4E00 && a <= 0x9FA5; 
    }

    public static void main(String[] args){
        String test = "中a国bc中国中国";
        System.out.println(getSubstring(test, 1, 10));
    }
}

tip: 通过a >= 0x4E00 && a <= 0x9FA5;来判断一个字符是否为中文

2.把浮点数字表示的钱的数量用中文读法来表示

public class Change{
    private static String[] nums = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
    private static String[] units = {"", "拾", "佰", "仟", "万"}; //"个"用来充数
    public static String ChangeTo(double s){
        int intpart = (int)s;
        double depart = s - intpart;
        String result = "";
        String r1 = DealInt(intpart);
        String r2 = DealDe(depart);
        return result = result + r1 + "元" + r2;
    }

    public static String DealInt(int intpart){
        String s = "" + intpart;
        String r = "";
        int size = s.length();
        int unit = size; //用来计算单位的索引
        for(int i = 0; i < size; i++){
            int num = s.charAt(i) - 48;
            if(num != 0) {
                r = r + nums[num] + units[(unit-1)%4];
            }
            else if(r.charAt(r.length()-1) != '零') {
                 r = r + "零";
            }
            if(unit == 5) {
                if(r.charAt(r.length()-1) == '零') r = r.substring(0, r.length()-1) + "万";
                else r = r + "万";
            }
            unit = unit - 1;
        }
        if(r.charAt(r.length()-1) == '零') return r.substring(0, r.length()-1);
        else return r;
    }

    public static String DealDe(double depart){
        String s = "" + depart;
        String r = "";
        if(s.charAt(2) != '0') r = r + nums[s.charAt(2)-48] + "角";
        if(s.charAt(3) != '0') r = r + nums[s.charAt(3)-48] + "分";
        return r; 
    }

    public static void main(String[] args) {
        double s = 40520562.253;
        System.out.println(ChangeTo(s));
    }
}

tip: 不能用(int)来把char类型强制装换为整数,要通过char - 48才能得到正确结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值