【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 @   逆火狂飙  阅读(110)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2021-08-09 【MySQL】修改表的存储引擎
2021-08-09 【MySQL】查看MySQL的默认存储引擎(Win环境)
2016-08-09 jQuery的$.get和$.ajax函数对比
2015-08-09 【Canvas与徽章】蓝底金圈白字不等式徽章
2014-08-09 如何获得一个网站的图标
2013-08-09 【JS】JavaScript中如何开立方
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示