刘磊-Lucien

开心工作生活每一天 (原创文章,转载请注明出处) (QQ:6509051欢迎交流)
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

JAVA:主键解决方法(1):最大值+1

Posted on 2008-09-24 12:04  LiuLei  阅读(778)  评论(0)    收藏  举报

/**
  * 判断字符串是不是数字
  *
  * @param str
  * @return true OR false
  * @see isNumeric("abc") = false
  * @see isNumeric("123") = true
  */
 public static boolean isNumeric(String str) {
  Pattern pattern = Pattern.compile("[0-9]*");
  Matcher isNum = pattern.matcher(str);
  if (!isNum.matches()) {
   return false;
  }
  return true;
 }

 /**
  * 得到01,或者001
  *
  * @param segNum
  *            段长度
  * @return String
  * @see getNewMaxStr(2) = "01"
  * @see getNewMaxStr(3) = "001"
  * @see getNewMaxStr(4) = "0001"
  */

 public static String getNewMaxStr(int segNum) {
  String result = "";
  result = fillStr("0", segNum - 1) + 1;
  return result;
 }

 /**
  * 通过字符串得到 字符串+1的最大数
  *
  * @param str
  *            字符串
  * @param segNum
  *            段长度
  * @return String
  * @see getNewMaxStr("002145", 3)=002146;
  * @see getNewMaxStr("002005", 3)=002006;
  * @see getNewMaxStr("002999", 2)="error: '[0029][99]' segNum is end the
  *      MAXSegNum."
  * @see getNewMaxStr("4123563364", 5)=4123563365;
  */
 public static String getNewMaxStr(String str, int segNum) {
  String result = "";

  if (isNumeric(str) == false) {
   // 判断是否数字
   result = "error: '" + str + "' not a Number.";
  } else {
   // 字符串长度是否能整除 段长
   int strLength = str.length();
   int mod = strLength % segNum;
   if (mod != 0) {
    result = "error: '" + str + "' not Mod segNum.";
   } else {
    String endSegStr = str.substring(strLength - segNum, strLength);
    String stratSegStr = str.substring(0, strLength - segNum);
    // System.out.println("endSegStr:" + endSegStr);
    // System.out.println("stratSegStr:" + stratSegStr);

    // 设置后位段数最大值

    // 将后位段字符str转成int,并 +1, 并取字符串,判断是否已经到最大值
    int segNumMaxStrInt = Integer.parseInt(endSegStr) + 1;
    String segNumMaxStr = String.valueOf(segNumMaxStrInt);
    if (segNumMaxStr.length() == (segNum + 1)) {
     result = "error: '[" + stratSegStr + "][" + endSegStr
       + "]' segNum is end the MAXSegNum.";
    } else {
     // 最大数 + 1; 如:100, 1000, 10000等
     int segNumMax = Integer
       .parseInt("1" + fillStr("0", segNum));
     // System.out.println("segNumMax:" +
     // String.valueOf(segNumMax + segNumMaxStrInt));
     String segNumStr = String.valueOf(
       segNumMax + segNumMaxStrInt).substring(1,
       segNum + 1);
     result = stratSegStr + segNumStr;
    }
   }
  }
  return result;
 }
}