最近在做一个条码打印的程序,要求箱号个数根据打印的数量自增长;箱号个格式为字符串尾号为数字。
分析:
- 首先根据箱号格式,将非数字字符部分和数字字符部分分隔;
- 其次将数字字符部分转换为数字型,进行运算;转换前记录数字字符长度;
- 再次自增后的数字长度与原来分隔数字型字符进行比较,自增后数字长度不够时,首个开始用0填充;
- 最后将原有的非数字字符部分和自增后组成的数字字符部分进行拼接得到结果。
缺陷:
- 对数字字符长度部分有所限制,字符串转成数字型较容易出错;
具体实现代码如下:
1 private void btnCalc_Click(object sender, EventArgs e) 2 { 3 string input = txtStr.Text.Trim(); 4 int addxs = Convert.ToInt32(txtXS.Text.Trim()); 5 6 //数字的字符索引 7 int strartNo = 0; 8 //固定字符部分 9 string gdzf = string.Empty;10 //可变列字符部分11 string kbsz = string.Empty;12 13 for (int i = 0; i < input.Length; i++)14 {15 //判断是否为数字类型16 if (58 > input[i] && input[i] > 47)17 {18 strartNo = i;19 break;20 }21 }22 23 //固定列赋值24 gdzf = input.Substring(0, strartNo);25 //可变列赋值26 kbsz = input.Substring(strartNo, input.Length - strartNo);27 28 //可变列长度29 int kbcd = kbsz.Length;30 31 int chsz = 0;32 try33 {34 chsz = Convert.ToInt32(kbsz);35 }36 catch (Exception)37 {38 txtResult.Text = "格式错误";39 }40 41 chsz = chsz + addxs;42 43 //比较原有数字字符长度与自增后的字符长度44 if (chsz.ToString().Length < kbcd)45 {46 //补零个数47 int blgs = kbcd - chsz.ToString().Length;48 string zero = string.Empty;49 for (int i = 0; i < blgs; i++)50 {51 zero = zero + "0";52 }53 54 kbsz = zero + chsz;55 }56 else57 {58 kbsz = chsz.ToString();59 }60 61 txtResult.Text = gdzf + kbsz;62 }
测试结果如下:
总结:
- 上述是个人写的算法,由于存在部分限制,如有更好的算法,望大神指点。