哈弗曼译码函数

    //译码
    public String decoding(String codeStr){
        int sign=0;
        String str="";
        //从头开始译码
        //for(;codeStr.length()>0;){//跳出循环的条件,译码全部完成
        for(;codeStr!="";){//跳出循环的条件,译码全部完成
            for(int i=0;i<256;i++){//遍历arrayStr[0~255]与codeStr的前几个编码比较

                if(arrayStr[i]!=null){
                    for(int j=0;j<arrayStr[i].length();j++){//比较前几个编码
                        if(codeStr.charAt(j)==arrayStr[i].charAt(j)){//存在codeStr剩余不足j个字符的危险
                            sign=1;
                        }else{
                            sign=0;break;//跳出循环
                        }
                    }


                if(sign==1){//全都符合
                    //删去

                    String temp="";
                    for(int k=arrayStr[i].length();k<codeStr.length();k++){
                        temp+=codeStr.charAt(k);
                    }
                    codeStr = temp;


                    //codeStr = codeStr.substring(arrayStr[i].length(),codeStr.length());

                    str+=(char)i;

                    break;

                }

                }

            }

        }
        System.out.println(str);
        return str;     
    }

这里是哈弗曼编码的译码函数,可以完成正常的译码,但是有一些疑问:
(1)

//codeStr = codeStr.substring(arrayStr[i].length(),codeStr.length());

当使用这样的代码去删除前几个二进制编码时
循环判断条件就只能是for(;codeStr.length()>0;)
而不能是for(;codeStr!=”“;)
(2)if(codeStr.charAt(j)==arrayStr[i].charAt(j)){
//存在codeStr剩余不足arrayStr[i].length()个字符的危险
这种危险只有在使用

//codeStr = codeStr.substring(arrayStr[i].length(),codeStr.length());

这行代码时才会显露出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值