Я бы, вероятно, использовал моего друга string.Split
:
string oldString = "BA-0001-3";
string[] parts = oldString.Split('-');
parts[parts.Length-1] = (Convert.ToInt32(parts[parts.Length-1])+1).ToString();
string newString = string.Join("-", parts);
Небольшой твик, который, возможно, сделает его быстрее (путем доступа к parts.Length
и вычитая 1 только один раз - не профилировал, так что это чистопредположение, и в любом случае это, скорее всего, незначительная разница), но, прежде всего, более устойчивое (с использованием int.TryParse
):
string oldString = "BA-0001-3";
string[] parts = oldString.Split('-');
int number;
int lastIndex = parts.Length-1;
parts[lastIndex] = (int.TryParse(parts[lastIndex], out number) ? ++number : 1).ToString();
string newString = string.Join("-", parts);