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

时间:2013-03-07 10:38:41

标签: c# .net

我有一个字符串,我需要递增1该字符串包含字符和数值。

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

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

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

我试过以下

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

任何人都有任何想法我会怎么做。

8 个答案:

答案 0 :(得分:16)

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

E.g。在您的情况下,您可以使用以下内容:

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)));

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

答案 1 :(得分: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");

输出将是:

newStr = "MD00495"

答案 2 :(得分:3)

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

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);

答案 3 :(得分:2)

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

0 1 2 3 4 5 6

M D 0 0 4 9 4

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

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

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

然后加入2个字段。

答案 4 :(得分:0)

您可以使用正则表达式:

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

string zeroStr=Regex.Replace(sdesptchNo, "[^0-9]", "");
string newZeroStr="";
for (int x=0;x<zeroStr.length;x++)
     if (zeroStr[x]=='0') newZeroStr=newZeroStr+"0"; 
     else break;

string newVal=Regex.Replace(sdesptchNo, "[0-9]", "") + newZeroStr + kod;

更新:这将保存你的零

答案 5 :(得分:0)

这是我的解决方案:

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();
}

试试吧!

答案 6 :(得分:0)

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);

答案 7 :(得分:0)

我用它来增加/减少条形码

/// <summary>
/// Gets the number portion of the string and adds 1 to it
/// </summary>
public static string IncrementNumbers(this string numString)
{
  if (numString.IsEmpty())
    return numString;
  else if (!numString.Where(Char.IsDigit).Any())
    return numString;
  else
  {
    string prefix = Regex.Match(numString, "^\\D+").Value;
    string number = Regex.Replace(numString, "^\\D+", "");
    int i = int.Parse(number) + 1;
    return prefix + i.ToString($"D{numString.Length - prefix.Length}");
  }
}

/// <summary>
/// Gets the number portion of the string and subtracts 1 from it
/// </summary>
public static string DecrementNumbers(this string numString)
{
  if (numString.IsEmpty())
    return numString;
  else if (!numString.Where(Char.IsDigit).Any())
    return numString;
  else
  {
    string prefix = Regex.Match(numString, "^\\D+").Value;
    string number = Regex.Replace(numString, "^\\D+", "");
    int i = int.Parse(number) - 1;
    return prefix + i.ToString($"D{numString.Length - prefix.Length}");
  }
}

/// <summary>
/// Shortented IsNullOrWhiteSpace 
/// </summary>
public static bool IsEmpty(this string str)
{
  if (str.TrimFix() == null)
    return true;

  return false;
}

/// <summary>
/// Trims the String and returns Null if it's empty space
/// </summary>
public static string TrimFix(this string rawString)
{
  if (!string.IsNullOrWhiteSpace(rawString))
  {
    return rawString.Trim();
  }
  return null;
}