Извлечь все символы после последнего появления шаблона C # - PullRequest
5 голосов
/ 20 июля 2009

Строки имеют следующий шаблон

1.0.0.0
1.0.0.1
1.0.0.2
...
...
...

Я ищу код, который будет читать последнюю созданную строку, увеличивать последнюю цифру на 1 и сохранять ее как новую строку.

Как мне это сделать?

С наилучшими пожеланиями,

Магия

Ответы [ 7 ]

6 голосов
/ 20 июля 2009

Вы можете разбить строку на компоненты, проанализировать последний, чтобы вы могли увеличить его, и снова собрать их вместе:

string[] parts = version.Split('.');
parts[3] = (Int32.Parse(parts[3]) + 1).ToString();
version = String.Join(".", parts);

Другой способ, который может быть несколько более эффективным, - это получить только последний компонент, используя строковые операции:

int pos = version.LastIndexOf('.') + 1;
int num = Int32.Parse(version.Substring(pos));
version = version.Substring(0, pos) + num.ToString();
3 голосов
/ 27 июля 2010

Если вы намерены всегда получать последнюю подстроку после определенного символа (исключая, конечно, символ-разделитель (в данном случае - точку)), который, как я считаю, является вашим намерением:

Сохраняйте простоту с 1 вкладышем:

string myLastSubString = myStringToParse.Split('.').Last();

Я позволю другим постам ответить на остальную часть вашего запроса.

2 голосов
/ 20 июля 2009
public string DoMagic(string s)
{
    string t = s.Substring(s.LastIndexOf(' ')+1);
    return t.Substring(0, t.Length-1) + (int.Parse(t[t.Length-1].ToString())+1).ToString();
}
1 голос
/ 20 июля 2009

Предполагая, что формат не изменится, это может быть вашим лучшим решением. Это будет работать даже с неупорядоченными строками списка версий.

        string VersionList = "1.0.0.0 1.0.0.1 1.0.0.2";

        List<Version> Versions = new List<Version>();

        foreach (string FlatVersion in VersionList.Split(' '))
            Versions.Add(new Version(FlatVersion));

        Versions.Sort(); Versions.Reverse();

        Version MaximumVersion = Versions[0];

        Version NewVersion = new Version(
            MaximumVersion.Major, 
            MaximumVersion.MajorRevision,
            MaximumVersion.Minor,
            MaximumVersion.MinorRevision + 1);
0 голосов
/ 20 июля 2009

Я сейчас использую VB, но перевод на C # должен быть простым. Отсюда реализация вашей реальной задачи должна быть простой: у вас есть коллекция, последний элемент - последнее число, просто увеличьте его, замените последний элемент коллекции и запишите его снова.

Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Dim matchC As MatchCollection = Regex.Matches("111.222.333", "\d+")
        Dim i As Integer = 1
        For Each x In matchC
            Console.Write(i.ToString & " ")
            Console.WriteLine(x)
            i = i + 1
        Next
        ' remember to check the case where no matches occur in your real code.
        Console.WriteLine("last number is " & matchC.Item(matchC.Count - 1).ToString)
        Console.ReadLine()
    End Sub

End Module
0 голосов
/ 20 июля 2009

Предполагается, что изменяется только последний элемент в подстроках:

List<string> items = GetItems();
string[] max = input.Split(' ').Max().Split('.');
string next = string.Format("{0}.{1}.{2}.{3}", max[0], max[1], max[2], int.Parse(max[3]) + 1);
0 голосов
/ 20 июля 2009

Предполагается, что ваш список строк:

List<string> stringList;

Вы можете получить последнюю запись в этом списке, используя:

string lastString = stringList[stringList.Length - 1];

Затем получите последний символ этой строки, используя:

char c = lastString[lastString.Length - 1];

Преобразование и приращение символа в десятичное число:

int newNum = Int32.Parse(c.ToString()) + 1;

Наконец, скопируйте исходную строку и замените последний номер новым:

string finalString = lastString;
finalString[finalString.Length - 1] = c;

Теперь добавьте это обратно в исходный список:

stringList.Add(finalString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...