请问一下关于字符串处理的有关问题
请教一下关于字符串处理的问题
项目中定义了一个编号规则,根据规则自动生成编号.原方法是这样做的
以上方法定义一个编号规则的示例如下
A规则 : {YearNO}WH{SequenceNO} 则生成2015WH0001 这样的编号
B规则: {YearNO}HP{SequenceNO} 则生成2015HP0001 这样的编号
C规则: JH{YearNO}{SequenceNO} 则应生成JH20150001这样的编号
问题出在C规则上,按上述方法写,默认是将{YearNO}排在了最前面,所以原方法只判断了获取来的最后一个编号的前四位是否是当年.
如获取到C规则 的最后一个编号为 JH20150003,则原方法中判断年号的位置就是错的,如何来判断获取来的编号中对应年号的位置呢?
不知道我说清楚了没有?
------解决思路----------------------
项目中定义了一个编号规则,根据规则自动生成编号.原方法是这样做的
//根据规则生成新编号
public string GenerateNewNO{string type}
{
string newNO = string.Empty;
switch (type)
{
case "A":
newNO = ConfigDAL.GetConfigValue("A编号规则");
break;
case "B":
newSPNO = ConfigDAL.GetConfigValue("B编号规则");
break;
case "C":
newSPNO = ConfigDAL.GetConfigValue("C编号规则", org);
break;
}
// 以下方法是获取最后编号
string lastNO = GetLastNO(type);
if (lastNO == "")
newNO = GenerateRuleCode(newNO, 1, 4);
else
{
// 此处判断获取到的最后一个编号的前四位是否是今年,如果不是,则流水号从1开始 问题出在此处
if (StringTools.Left(lastNO, 4) != DateTime.Now.Year.ToString())
newSPNO = GenerateRuleCode(newNO, 1, 4);
else
{
int num = Convert.ToInt32(StringTools.Right(lastNO, 4));
num = num + 1;
newNO = GenerateRuleCode(newNO, num, 4);
}
}
return newNO;
}
// 此方法根据编号规则替换掉相应的字符 rulestring表示规则字符串
public string GenerateRuleCode(string rulestring, int startNO, int seqLen)
{
//替换年号
rulestring = rulestring.Replace("{YearNO}", DateTime.Now.Year.ToString());
//替换月份
rulestring = rulestring.Replace("{MonthNO}", DateTime.Now.Month.ToString());
//替换流水号
rulestring = rulestring.Replace("{SequenceNO}", GenerateNumCode(seqLen, startNO));
return rulestring;
}
以上方法定义一个编号规则的示例如下
A规则 : {YearNO}WH{SequenceNO} 则生成2015WH0001 这样的编号
B规则: {YearNO}HP{SequenceNO} 则生成2015HP0001 这样的编号
C规则: JH{YearNO}{SequenceNO} 则应生成JH20150001这样的编号
问题出在C规则上,按上述方法写,默认是将{YearNO}排在了最前面,所以原方法只判断了获取来的最后一个编号的前四位是否是当年.
如获取到C规则 的最后一个编号为 JH20150003,则原方法中判断年号的位置就是错的,如何来判断获取来的编号中对应年号的位置呢?
不知道我说清楚了没有?
------解决思路----------------------