Les chaînes sont du motif suivant
1.0.0.0 1.0.0.1 1.0.0.2 ... ... ...
7 Réponses :
Vous pouvez diviser la chaîne dans les composants, analyser la dernière pour que vous puissiez l'augmenter et les mettre à nouveau ensemble:
int pos = version.LastIndexOf('.') + 1;
int num = Int32.Parse(version.Substring(pos));
version = version.Substring(0, pos) + num.ToString();
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();
}
En supposant que votre liste de chaîne est la suivante: Vous pouvez obtenir la dernière entrée de cette liste à l'aide de: p> puis obtenir le dernier caractère de cette chaîne utilisant: p> convertissez et incrémentez le caractère en une décimale: p> Enfin, copiez l'original String et remplacez le dernier numéro avec le nouveau numéro: p> Ajoutez maintenant à la liste d'origine: P> stringList.Add(finalString);
en supposant que seul le dernier élément des sous-chaînes varie:
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);
J'utilise VB en ce moment, mais la traduction to c # devrait être simple. À partir de là, mettre en œuvre votre problème réel devrait être simple - vous avez une collection, le dernier élément est le dernier numéro, il suffit de l'incrémenter et de remplacer le dernier élément de la collection et de l'écrire à nouveau.
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
En supposant que le format ne change pas, cela peut être votre meilleure solution. Cela fonctionnera même avec des chaînes de liste de version non commandées.
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);
C'est une bonne solution. Si l'une des chaînes contient un point supplémentaire, ou un caractère non numérique, cela échouera. Mais si toutes les chaînes sont dans un format correct, cela fonctionnera très bien.
Je ne ferais pas de versions.Reverse (), cependant - c'est un gaspillage de CPU. Version simple Maxversion = Versions [Versions.Count - 1];
Vrai. Les deux liste (t) .Item and List (t) .Count () sont O (1). Liste.Reverse () est O (n).
Si votre intention est de toujours obtenir la dernière sous-chaîne après un caractère spécifique (à l'exclusion du caractère de délimiteur, bien sûr (dans ce cas une période)), que je crois est votre intention:
Gardez-le simple avec une doublure : p> Je laisserai les autres messages répondent au reste de votre requête. P> P>
Est-ce une chaîne ou une liste de chaînes?
Liste des chaînes. La dernière chaîne créée sera celle où le dernier chiffre est le plus grand.