增加一个包含字母和数字的字符串

我有一个字符串,我需要增加1字符串有字符和数字值。

我有的字符串布局如下“MD00494”

我如何将其增加到“MD00496”和“MD00497”等

如果它是带有数字的普通字符串,我会将其解析为int。

我尝试了以下内容

int i = int.Parse(sdesptchNo); i++; txtDispatchNo.Text = i.ToString(); 

任何想法如何我会这样做。

首先应该弄清楚字符串之间的任何共性。 如果在末尾始终有一个字母前缀后跟数字(具有固定宽度),那么您可以删除这些字母,解析其余字母,增加并再次将它们粘在一起。

例如,在您的情况下,您可以使用以下内容:

 var prefix = Regex.Match(sdesptchNo, "^\\D+").Value; var number = Regex.Replace(sdesptchNo, "^\\D+", ""); var i = int.Parse(number) + 1; var newString = prefix + i.ToString(new string('0', number.Length)); 

另一个可能更强大的选择可能是

 var newString = Regex.Replace(x, "\\d+", m => (int.Parse(m.Value) + 1).ToString(new string('0', m.Value.Length))); 

这将用相同宽度的递增数字替换字符串中的任何数字 – 但是将每个非数字完全相同并保留在同一位置。

这是一种非正则表达方式:P

 string str = "MD00494"; string digits = new string(str.Where(char.IsDigit).ToArray()); string letters = new string(str.Where(char.IsLetter).ToArray()); int number; if (!int.TryParse(digits, out number)) //int.Parse would do the job since only digits are selected { Console.WriteLine("Something weired happened"); } string newStr = letters + (++number).ToString("D5"); 

输出将是:

 newStr = "MD00495" 

假设你只需要增加字符串的数字部分,并且字符串的结构总是 – 一堆非数字字符后跟一串数字,你可以使用正则表达式将字符串分解为这些两个组件,将数字部分转换为整数,递增然后连接回来。

 var match = Regex.Match("MD123", @"^([^0-9]+)([0-9]+)$"); var num = int.Parse(match.Groups[2].Value); var after = match.Groups[1].Value + (num + 1); 

您需要找到字符串中第一个数字的位置。 然后将字符串拆分为2个字段。

0 1 2 3 4 5 6

MD 0 0 4 9 4

第一个字段是非数字部分“MD”第二个字段是数字部分“00494”

将仅数字部分增加到“00495”

您将丢失前导零,因此一旦增加,您将需要使用相同数量的零填充新数字。

然后加入2个字段。

你可以使用正则表达式:

 int kod = int.Parse(Regex.Replace(sdesptchNo, "[^0-9]", "")) + 1; string zeroStr=Regex.Replace(sdesptchNo, "[^0-9]", ""); string newZeroStr=""; for (int x=0;x 

更新:这将节省你的零

 string sDispatchNo = "MS00914"; var pattern = @"^[a-zA-Z]+"; var strPart = Regex.Match(sDispatchNo, pattern).Value; var noPart = Regex.Replace(sDispatchNo, pattern, ""); var no = int.Parse(noPart); var length = noPart.Length; length = (no + 1)/(Math.Pow(10,length)) == 1 ? length + 1 : length; var output = strPart + (no + 1).ToString("D" + length); 

这是我的解决方案:

 string str = Console.ReadLine(); string digits = new string(str.Where(char.IsDigit).ToArray()); string letters = new string(str.Where(char.IsLetter).ToArray()); string newStr; int number; if (!int.TryParse(digits, out number)) { Console.WriteLine("Something weird happened"); } if (digits.StartsWith("0")) { newStr = letters + (++number).ToString("D5"); } else { newStr = letters + (++number).ToString(); } 

试试吧!