博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript:查找“跳号”号码
阅读量:5973 次
发布时间:2019-06-19

本文共 2142 字,大约阅读时间需要 7 分钟。

业务背景:

航空货运系统中,“货运代理商”会定期从“航空公司”领取一定数量的纸质运单(每张纸上有一个单号),这些单号都是连续的(即:每次可以理解为领取一个“号段”),而且每张单子都要向航空公司交纳一定的费用(即:单号是有价的资产)。

实际使用中,货运代理商希望下级的各营业点连续把单号用完,如果出现未连续使用的情况(即:所谓的跳号),要求快速找出来,给予提醒,提示用户优先使用跳号的运单。(否则这些运单号,一直可能不被注意到,造成浪费,而且每到期末跟航空公司对账时,也对不清楚)

思路: 

A:

一个号段的号码,抽象成一个数组;每个号码的使用状态,也抽象成一个等长的数组(Y表示已使用,N表示未使用)

这样使用状态就可形成 类似 "YYYYNNYYNYNNN" 的字符串,只找正则表达式找到 "N...Y"的位置,即为跳号的位置(即:下标值),根据该位置,即可方便取出跳号的号码

B:

如果不使用正则表达式,直接双重循环,也可以查找到,若某一个元素为“N”,在它后面还有"Y",则表示该元素“被跳号”了

1  2  3              4         find SKip Number 5         
6 7 8 70 71

 C#的实现:

1         static String[] findSkipNumberA(Regex reg, String[] awbNos, String awbStatus) 2         { 3             //Regex reg = new Regex("N+Y", RegexOptions.Compiled); 4             List
result = new List
(); 5 6 MatchCollection matchs = reg.Matches(awbStatus); 7 8 int findStartIndex = 0; 9 foreach (Match m in matchs)10 {11 String matchValue = m.Groups[0].Value;12 findStartIndex = awbStatus.IndexOf(matchValue, (findStartIndex > 0 ? findStartIndex + 1 : 0));13 for (int i = 0; i < matchValue.Length - 1; i++)14 {15 result.Add(awbNos[findStartIndex + i]);16 }17 18 findStartIndex += (matchValue.Length - 1);//更新下次IndexOf查找的起始位置19 }20 21 return result.ToArray();22 }23 24 static String[] findSkipNumberB(String[] awbNos, String[] awbStatus)25 {26 List
result = new List
();27 for (int i = 0; i < awbStatus.Length - 1; i++)28 {29 for (int j = i + 1; j < awbStatus.Length; j++)30 {31 if (awbStatus[i] == "N" && awbStatus[j] == "Y")32 {33 result.Add(awbNos[i]);34 break;35 }36 }37 }38 return result.ToArray();39 }

c#版实际测试下来,如果数组较大(>200),正则表达式方式优势明显;数组较小于时,手动双重循环更快

转载地址:http://srfox.baihongyu.com/

你可能感兴趣的文章
2018年尾总结——稳中成长
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
Centos下基于Hadoop安装Spark(分布式)
查看>>
mysql开启binlog
查看>>
设置Eclipse编码方式
查看>>
分布式系统唯一ID生成方案汇总【转】
查看>>
并查集hdu1232
查看>>
Mysql 监视工具
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
博客搬家了
查看>>
Python中使用ElementTree解析xml
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>
Eclipse Java @Override 报错
查看>>
linux的日志服务器关于屏蔽一些关键字的方法
查看>>
mysql多实例实例化数据库
查看>>
javascript 操作DOM元素样式
查看>>
HBase 笔记3
查看>>