票据系统对子票区间的一个应用
生活随笔
收集整理的这篇文章主要介绍了
票据系统对子票区间的一个应用
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
因为票据系统对子票区间的管理非常严格,但是为了兼容各大系统传送过来不同格式的数据,所以要做一个简单的处理!
1、当知道传入数据一定携带“-”时,可以直接使用split对字符串进行拆分
split 拆分字符串
@Testpublic void test10(){String rangNo = "123456-3654123";//拆分String[] split = rangNo.split("-");//String类型String begin = split[0];String end = split[1];//转intint intBegin = Integer.parseInt(begin);int intEnd = Integer.parseInt(end);//补位String formatBegin = String.format("%012d", intBegin);//只能识别int类型,所以需要转换String format = String.format("%012d", intEnd);System.out.println(formatBegin+"**************8"+format);}2、如果不确定收到的参数是什么类型,需做兼容处理
contains 集合中是否包含某字符串
indexOf 查询字符串在第几位
substring 字符串截取(截取时要注意包前不包后)
@Testpublic void test11(){String rangNo = "123-321";//判空if (StringUtils.isNullOrEmpty(rangNo)){//判断是否带“-”boolean contains = rangNo.contains("-");if (contains){//判断“-”在第几位int i = rangNo.indexOf("-");//分段获取String substringBegin = rangNo.substring(0, i);//截取前半部分String substringEnd = rangNo.substring(i + 1);//截取后半部分//补位String formatBegin = String.format("%012d", Integer.parseInt(substringBegin));//只能识别int类型,所以需要转换String formatEnd = String.format("%012d", Integer.parseInt(substringEnd));System.out.println(formatBegin+"********"+formatEnd);List<String> rangList = new ArrayList<>();rangList.add(formatBegin);rangList.add(formatEnd);return;}}}注意:Integer是有长度限制的,当时小编在写这个工具类时没考虑到最大值问题,所以代码还有一个很明显的bug,应用实际最重要,结合场景去完善功能吧!!!!!
java int 类整数的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647
可以用 Integer.MAX_VALUE 表示它,即 int value = Integer.MAX_VALUE;
Integer.MAX_VALUE + 1 = Integer.MIN_VALUE = -2147483648
再大的数就要用 long (最大值 2 的 63 次方 - 1 )或者 BigDecimal 表示
提取新增Utils方法
package cn.bankapp.ecds.custom.tranServerOld.util;import cn.bankapp.ecds.common.exception.CheckException; import cn.bankapp.ecds.common.exception.ErrorCode;import lombok.extern.log4j.Log4j2; import org.apache.commons.lang.StringUtils;import java.util.ArrayList; import java.util.List;/*** @ClassName RangeNoInspectUntils* @Description TODO* @Author WYD* @Date 2022/7/19 17:45* @Version 1.0*/ @Log4j2 public class RangeNoInspectUntils {/*** 票据区间拆分** @param rangeNo 子区间号* @param beginRangeNo 开始区间* @param endRangeNo 结束区间* @throws Exception*/public List<String> rangeNo(String rangeNo, String beginRangeNo, String endRangeNo) throws Exception {if (StringUtils.isBlank(rangeNo) && StringUtils.isBlank(beginRangeNo) && StringUtils.isBlank(endRangeNo)) {throw new CheckException(ErrorCode.PARAM_NULL, "‘子区间号’或‘起始子区间-结束子区间’至少有一个不能为空");}String beginRangeNoNew;String endRangeNoNew;if (StringUtils.isNotEmpty(rangeNo)) {boolean containsRangeNo = rangeNo.contains("-");if (containsRangeNo) {log.info("-----------子票区间{}-----------", rangeNo);//wyd 20220505 拆分String[] str = rangeNo.split("-");String begin = str[0];String end = str[1];if ("0".equals(begin) && "0".equals(end)) {beginRangeNoNew = begin;endRangeNoNew = end;} else {//获取截取到的参数int beginNo = Integer.parseInt(begin);int endNo = Integer.parseInt(end);//数据不够12位进行补齐beginRangeNoNew = String.format("%012d", beginNo);endRangeNoNew = String.format("%012d", endNo);}}else {if ("0".equals(rangeNo)){beginRangeNoNew = "0";endRangeNoNew = "0";}else {log.info("票据区间不存在");throw new Exception("票据区间不存在");}}} else {log.info("-----------起始区间{}-结束区间{}-----------", beginRangeNo, endRangeNo);String rangeNo1 = null;if (StringUtils.isNotBlank(beginRangeNo)) {rangeNo1 = beginRangeNo;} else {rangeNo1 = endRangeNo;}boolean containsBeginRangeNo = rangeNo1.contains("-");if (containsBeginRangeNo) {log.info("----------进入containsBeginRangeNo方法{}----------------", containsBeginRangeNo);int i1 = rangeNo1.indexOf("-");String beginNo = rangeNo1.substring(0, i1);String endNo = rangeNo1.substring(i1 + 1);if ("0".equals(beginNo) && "0".equals(endNo)) {log.info("----------等分化不可拆分票--------------");beginRangeNoNew = beginNo;endRangeNoNew = endNo;} else {log.info("----------等分化可拆分票--------------");//数据不够12位进行补齐beginRangeNoNew = String.format("%012d", Integer.parseInt(beginNo));endRangeNoNew = String.format("%012d", Integer.parseInt(endNo));}} else {log.info("----------未进入containsBeginRangeNo方法{}----------------", containsBeginRangeNo);if ("0".equals(beginRangeNo) && "0".equals(endRangeNo)) {log.info("----------等分化不可拆分票{}{}--------------", beginRangeNo, endRangeNo);beginRangeNoNew = beginRangeNo;endRangeNoNew = endRangeNo;} else {log.info("----------等分化可拆分票{},{}--------------", beginRangeNo, endRangeNo);//数据不够12位进行补齐beginRangeNoNew = String.format("%012d", Integer.parseInt(beginRangeNo));endRangeNoNew = String.format("%012d", Integer.parseInt(endRangeNo));}}}List<String> rangeNoList = new ArrayList<>();rangeNoList.add(beginRangeNoNew);rangeNoList.add(endRangeNoNew);log.info("区间号{},{}",beginRangeNoNew,endRangeNoNew);return rangeNoList;}/*** @return void* 测试* @Author WYD* @Description //TODO* @Date 2022/7/19* @Param [args]* @Version 1.0**/public static void main(String[] args) throws Exception {String billNo = "62312313"; // 票号String subString = billNo.substring(0, 1);System.out.println(subString);//区间//等分化票可拆分if ("5".equals(subString) || "6".equals(subString)) {List<String> strings = new RangeNoInspectUntils().rangeNo("0", null, null);System.out.println(strings.get(0));System.out.println(strings.get(1));} else {//传统票区间默认为12个0System.out.println(String.format("%012d", Integer.parseInt("0"))); // 起始区间System.out.println(String.format("%012d", Integer.parseInt("0"))); // 结束区间}} }总结
以上是生活随笔为你收集整理的票据系统对子票区间的一个应用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Use Case框图
- 下一篇: 基于S2SH+ExtJS4+Oracle