【Java】字符串处理:按原表名+日期生成新表名,要求长度不超过限制,如果超限则用日期覆盖原名尾部

需求

如题

代码

package newtname;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

public class Test {
    /**
     * 按旧表名+当前日期生成新表名
     * 要求新表名不超过最大长度
     * 如果超过则截取原有表名的尾部
     * 
     * @param tname 原有表名
     * @param maxLen 最大长度
     * @return
     */
    private static String generateNewTname(String tname,final int maxLen) {
        final String apdx=getCurrDate();
        final int apdxLen=9;
        
        if(tname.length()+apdxLen<=maxLen) {
            return tname+apdx;
        }else {
            char[] arr=new char[maxLen];
            final int tnameLen=tname.length();
            int limit=tnameLen>maxLen?maxLen:tnameLen;
            
            // 前半(取原有表名)部分
            char[] arrFrom=tname.toCharArray();
            for(int i=0;i<limit;i++) {
                arr[i]=arrFrom[i];
            }
            
            // 后半(取日期)部分
            char[] arrApdx=apdx.toCharArray();
            for(int i=0;i<apdxLen;i++) {
                arr[maxLen-apdxLen+i]=arrApdx[i];
            }
            
            return String.valueOf(arr);
        }
    }
    
    // 取当前日期
    public static String getCurrDate() {
        DateTimeFormatter formatter= DateTimeFormatter.ofPattern("_yyyyMMdd");
        return formatter.format(LocalDateTime.now());
    }
    
    // 测试
    public static void main(String[] args) {
        String[] tnames= {"emp","emp1","emp12","emp123","emp1234","emp12345","emp123456","emp1234567"
                ,"emp12345678","emp123456789","emp1234567890","emp1234567890a","emp1234567890ab","emp1234567890abc","emp123456790abcd"};
        
        for(String tname:tnames) {
            String newTname=generateNewTname(tname,20);
            System.out.println(String.format("%30s %30s", tname,newTname));
        }
    }
}

输出:

                           emp                   emp_20220809
                          emp1                  emp1_20220809
                         emp12                 emp12_20220809
                        emp123                emp123_20220809
                       emp1234               emp1234_20220809
                      emp12345              emp12345_20220809
                     emp123456             emp123456_20220809
                    emp1234567            emp1234567_20220809
                   emp12345678           emp12345678_20220809
                  emp123456789           emp12345678_20220809
                 emp1234567890           emp12345678_20220809
                emp1234567890a           emp12345678_20220809
               emp1234567890ab           emp12345678_20220809
              emp1234567890abc           emp12345678_20220809
              emp123456790abcd           emp12345679_20220809

总结

用数组操作进行两次赋值,避免了容易导致复杂错乱的if...else结构。

END

posted @ 2022-08-09 05:43  逆火狂飙  阅读(120)  评论(0)    收藏  举报
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东