【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