最近在做一个条码打印的程序,要求箱号个数根据打印的数量自增长;箱号个格式为字符串尾号为数字。
分析:
- 首先根据箱号格式,将非数字字符部分和数字字符部分分隔;
- 其次将数字字符部分转换为数字型,进行运算;转换前记录数字字符长度;
- 再次自增后的数字长度与原来分隔数字型字符进行比较,自增后数字长度不够时,首个开始用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 try 33 { 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 else 57 { 58 kbsz = chsz.ToString(); 59 } 60 61 txtResult.Text = gdzf + kbsz; 62 }
测试结果如下:
总结:
- 上述是个人写的算法,由于存在部分限制,如有更好的算法,望大神指点。
时间: 2024-11-05 04:49:22