[英]How to increment the last part of string that contains a number
我有這個序列號:
string serialTXT = "SD50MRF999";
我想將其增加到“ SD50MRF1000”而不是“ SD51MRF000”。
我嘗試了這個:
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));
但是結果是:它隔離了“ SD”和“ 50MRF1000”
我通常將LINQ用於此目的:
string serialTXT = "SD50MRF01";
string intPart = string.Join("", serialTXT.Reverse().TakeWhile(char.IsDigit).Reverse());
int intP = int.Parse(intPart);
serialTXT = serialTXT.Remove(serialTXT.Length - intPart.Length) +
(intP < 10 ? "0" + (intP + 1) : (intP + 1).ToString());
結果=>“ SD50MRF1000”
只是不要忘記將其添加到您的using指令:
using System.Linq;
您可以使用正則表達式獲取最后一位數字,然后將其轉換為數字,然后將其固定在不匹配的字符串部分的末尾:
string serialTXT = "SD50MRF999";
Regex re = new Regex( "([0-9]+)$"); /* digits at the end */
string end = re.Match(serialTXT).Value;
int newNum = int.Parse(end) + 1; /* we need a number to increment it */
string newSerial = serialTXT.Substring(0, serialTXT.Length - end.Length) + newNum;
非常規表達式的答案是檢查字符串中的最后一個字符以查看它是否是一個數字,然后檢查下一個,以此類推,直到獲得您的數字為止。
像@ S.Akbari一樣,我認為Linq在這里可以很好。 該代碼段將適用於"SD50MRF50"
類的字符串。
public static void Main()
{
var str = "SD50MRF999";
var digits = str.Reverse().TakeWhile(char.IsDigit);
var number = digits.Select((x,i) => (x - '0') * Math.Pow(10, i)).Sum();
var letters = str.Remove(str.Length - digits.Count());
// use letters + (++number).ToString("00")
// or letters + (++number).ToString("D2")
// to write `01`, `02`, `03` etc.
Console.WriteLine(letters + (++number));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.