У меня есть строка ABC0001

Я хочу добавить +1 для каждой новой записи в БД.

Если я возьму SubString(3, myStr.Length -3), он даст мне только 1, обрезая все 0 (нули).

Есть ли другой способ добавить +1 к каждой новой записи?

Спасибо.

c#
-1
A Hassan 5 Сен 2017 в 08:53

9 ответов

Лучший ответ

Давайте попробуем код ниже. Я думаю, что это поможет вам:

var myStr = "ABC0001";
var numStr = Int32.Parse(myStr.Substring(3, myStr.Length -3));
numStr += 1;
myStr = myStr.Substring(0, 3) + numStr.ToString("0000");

Console.WriteLine(myStr);
2
Hieu Le 5 Сен 2017 в 06:10

Вот пример, это также можно сделать с помощью регулярных выражений, и для следующего кода может потребоваться некоторая корректировка в соответствии с вашими требованиями. Но это даст вам возможность пойти:

string data = "ABC0001";
string digits = new String(data.ToCharArray().Where(c => Char.IsDigit(c)).ToArray());
int num = Int32.Parse(digits);
num++;
1
Tejashwi Kalp Taru 5 Сен 2017 в 06:03

И простой, использующий форматирование строк:

        string s = "ABC0001";
        int index = Int16.Parse(s.Substring(3, s.Length - 3)) + 1;
        string result = s.Substring(0, 3) + $"{index:D4}";

Полный пример программы:

    static void Main(string[] args)
    {
        string s = "ABC0000";
        for(int i = 0; i < 10; i++)
        {
            int index = Int16.Parse(s.Substring(3, s.Length - 3)) + 1;
            s = s.Substring(0, 3) + $"{index:D4}";
            Console.WriteLine(s);
        }
        Console.ReadLine();
    }
1
Johan Donne 5 Сен 2017 в 06:46

Еще одно решение:

        var bdRecords = new List<string>(); // new collection of database records.

        string text = "ABC0001"; // initial string. Can it be initially "ABC"?

        for (int i = 1; i <= 100; i++) // looping through all needed existing records (suppose we have 100, but you didn`t provide some initial info about database records). "foreach" can be used here.
            bdRecords.Add(text.Substring(0, 3) +  i.ToString("D4")); 

Проверьте комментарии в коде. После этого у вас будет коллекция из 100 отформатированных строк. Затем вы можете обновить базу данных с ним.

0
Nikita Viul 5 Сен 2017 в 06:50

Попробуй это,

string test = "ABC0001";
string leftSide = string.Join("", test.Take(3)); // take 3 of string 'ABC'
int num = Convert.ToInt32(string.Join("", test.Skip(3))) + 1; // skip 3 to get 0001
leftSide = leftSide + 
           string.Concat(Enumerable.Repeat("0", 4 - num.ToString().Length)) + 
           num; // ABC + repeat 0 elements according to increased num + append the new num

Надежда помогает,

1
Berkay 5 Сен 2017 в 06:22

Попробуйте вот так с регулярными выражениями

using System.Text.RegularExpressions;

var match = Regex.Match("MD00123", @"^([^0-9]+)([0-9]+)$");
var num = int.Parse(match.Groups[2].Value);   
var after = match.Groups[1].Value + (num + 1).ToString("D4");
MessageBox.Show(after.ToString());
1
Znaneswar 5 Сен 2017 в 06:07

Я расширил код из hiule, чтобы он теперь работал:

        var myStr = "ABC0001";
        var numStr = Int32.Parse(myStr.Substring(3, myStr.Length - 3));
        numStr += 1;
        myStr = myStr.Substring(0,3) + numStr.ToString("0000");

Я даю мне результат "ABC0002", который, я думаю, должен быть результатом, который вы намерены получить.

1
Christian Müller 5 Сен 2017 в 06:09

Это можно сделать с помощью регулярных выражений

string input = "ABC0001";

Regex reg = new Regex(@"([a-zA-Z]+)(\d+)");
Match result = reg.Match(input);

string alpha = result.Groups[1].Value;
string number = result.Groups[2].Value;

int inp = (Int32.Parse(number) + 1).ToString("D4"); //get 0002

input = alpha + inp ; // get ABC0002
0
user6448640user6448640 5 Сен 2017 в 06:06

Попробуй это:

myStr = myStr.Substring(0, 3)
       + (Convert.ToInt32(data.Substring(3, myStr.Length -3)) + 1).ToString("0000");

Я сделал это так просто и лаконично, как только мог.

1
Afnan Makhdoom 5 Сен 2017 в 06:12