C# 提取模式C最后一次出现后的所有字符#

C# 提取模式C最后一次出现后的所有字符#,c#,string,C#,String,字符串具有以下模式 1.0.0.0 1.0.0.1 1.0.0.2 ... ... ... 我正在寻找一个代码,它将读取最后创建的字符串,并将最后一个数字增加1,然后将其保存为新字符串 我该怎么做 致以最良好的祝愿 Magic您可以将字符串拆分为多个组件,解析最后一个组件以便增加它,然后将它们重新组合在一起: string[] parts = version.Split('.'); parts[3] = (Int32.Parse(parts[3]) + 1).ToString(); versi

字符串具有以下模式

1.0.0.0
1.0.0.1
1.0.0.2
...
...
...
我正在寻找一个代码,它将读取最后创建的字符串,并将最后一个数字增加1,然后将其保存为新字符串

我该怎么做

致以最良好的祝愿


Magic

您可以将字符串拆分为多个组件,解析最后一个组件以便增加它,然后将它们重新组合在一起:

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

假设您的字符串列表为:

List<string> stringList;
然后使用以下命令获取该字符串的最后一个字符:

char c = lastString[lastString.Length - 1];
将字符转换并递增为十进制:

int newNum = Int32.Parse(c.ToString()) + 1;
最后,复制原始字符串并将最后一个数字替换为新数字:

string finalString = lastString;
finalString[finalString.Length - 1] = c;
现在将其添加回原始列表:

stringList.Add(finalString);

假设子字符串中只有最后一个元素不同:

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);
List items=GetItems();
字符串[]max=input.Split(“”).max().Split(‘.);
string next=string.Format(“{0}.{1}.{2}.{3}”,max[0],max[1],max[2],int.Parse(max[3])+1);

我现在正在使用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

假设格式不会改变,这可能是最好的解决方案。这甚至适用于无序的版本列表字符串

        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);
string VersionList=“1.0.0.0 1.0.0.1 1 1.0.0.2”;
列表版本=新列表();
foreach(VersionList.Split(“”)中的字符串FlatVersion)
版本。添加(新版本(扁平版));
Versions.Sort();Versions.Reverse();
版本最大版本=版本[0];
版本NewVersion=新版本(
最大版本,少校,
MaximumVersion.MajorRevision,
最大版本。小调,
MaximumVersion.MinorRevision+1);

如果您的目的是始终获取特定字符后的最后一个子字符串(当然不包括分隔符字符(在本例中为句点)),我相信这是您的目的:

使用1号衬里保持简单:

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

我将让其他帖子回答您的其余问题。

这是一个字符串还是字符串列表?字符串列表。最后创建的字符串将是最后一个数字最大的字符串。这是一个很好的解决方案。如果任何字符串包含额外的点或非数字字符,则此操作将失败。但是,如果所有字符串的格式都正确,它就会工作得很好。不过,我不会使用Versions.Reverse()——这是对cpu的浪费。简单版本maxVersion=Versions[Versions.Count-1];对。List(T).Item和List(T).Count()都是O(1)。List.Reverse()是O(n)。
        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);
string myLastSubString = myStringToParse.Split('.').Last();