java 定长报文补位问题

项目开发遇到问题描述:
需求是要实现定长报文的 左对齐右补位 的操作。于是项目组的同事们就写了这样的算法。
算法1

public String padRight(String orgStr,int len,String aliStr){
    int length=orgStr.length();
    for(int i=0;i<len-length;i++){
        orgStr+=aliStr;
    }
    return orgStr;
}`

分析:此段代码只能说是大概实现了该功能,漏洞如下
1 没有考虑 orgStr.length()>=len 的情况。
2 没有考虑 英文数字是一个字节,汉字占两个字节的问题
3 效率底下,使用orgStr+=aliStr,在java中这么写每次都会在内存中创建新的对象。低效的做法不值得提倡。

改进后的算法如下

public String padRight(String orgStr,int len,String aliStr){
    //第一步判断 不需要右补位的情况 直接返回原始字符串
    if(orgStr==null || orgStr.length()>=len){
        return orgStr;
    }

    //取得字符串的长度,注意汉字占两个字节的问题
    int length=0;
    StringBuffer res=new StringBuffer();
    StringBuffer bf=new StringBuffer(orgStr);
    for(int i=0;i//取得ascii编码 据此判断
        int ASCII=Character.codePointAt(orgStr,i);
        if(ASCII>=0 && ASCII<=255){
            length++;
        }else{
            length+=2;
        }
    }

    //准确的字节长度拿到后 再据此补位
    for(int j=0;jreturn res.toString();
}

分析:
此算法比较周全完整,
1考虑了不需要补位的情况
2根据ascii码区分汉字占两个字节的情况
3使用stringbuffer.append()减少内存消耗
4 java中 string.length()方法获取到的字符长度 汉字记1字节,比如String s=”abc华山”。则s.length() 得到的是 5

你可能感兴趣的:(项目开发经验)