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

Ink*_*key 10 .net c#

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

我的字符串布局如下"MD00494"

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

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

我尝试了以下内容

 int i = int.Parse(sdesptchNo);
 i++;
 txtDispatchNo.Text = i.ToString();
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*oey 17

首先应该弄清楚字符串之间的任何共性.如果在结尾总是有一个字母前缀后面跟着数字(有一个固定的宽度),那么你可以删除这些字母,解析其余字母,递增,然后再将它们粘在一起.

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

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));
Run Code Online (Sandbox Code Playgroud)

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

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

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


Ode*_*ded 5

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

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);
Run Code Online (Sandbox Code Playgroud)


Hab*_*bib 5

这是一种非正则表达方式: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");
Run Code Online (Sandbox Code Playgroud)

输出将是:

newStr = "MD00495"
Run Code Online (Sandbox Code Playgroud)

  • 这是一个优雅的解决方案,尽管值得添加这个字符串 newStr = letters + (++number).ToString($"D{digits.Length}"); 这将允许不同数量的前导零 (2认同)