2009-07-20 65 views
5

Các chuỗi là các mẫu sauExtract Tất cả Nhân vật sau khi xuất hiện cuối cùng của một mô hình C#

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

Tôi đang tìm kiếm một mã mà sẽ đọc chuỗi tạo ngoái và tăng chữ số cuối cùng bởi 1 và lưu nó như một chuỗi mới.

Tôi làm cách nào?

Best Regards,

kỳ diệu

+3

Đó có phải là một chuỗi hoặc danh sách các chuỗi không? –

+0

Danh sách các chuỗi. Chuỗi được tạo cuối cùng sẽ là chuỗi có chữ số cuối cùng lớn nhất. –

Trả lời

6

Bạn có thể chia chuỗi thành các thành phần, phân tích tác phẩm mới nhất để bạn có thể tăng nó, và đặt chúng lại với nhau một lần nữa:

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

Một phương pháp có thể hiệu quả hơn một chút là chỉ lấy thành phần cuối cùng bằng cách sử dụng các hoạt động chuỗi:

int pos = version.LastIndexOf('.') + 1; 
int num = Int32.Parse(version.Substring(pos)); 
version = version.Substring(0, pos) + num.ToString(); 
2
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(); 
} 
+2

+1 cho những gì tôi cho là một trò chơi chữ? (Tên OP là Magic) –

0

Giả sử danh sách chuỗi của bạn là:

List<string> stringList; 

Bạn có thể có được mục cuối cùng trong danh sách đó sử dụng:

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

Sau đó nhận được ký tự cuối cùng của chuỗi rằng việc sử dụng:

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

Chuyển đổi và tăng char thành số thập phân:

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

Cuối cùng, sao chép chuỗi gốc và thay thế số cuối cùng với mới:

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

Bây giờ thêm này trở lại vào danh sách ban đầu:

stringList.Add(finalString); 
0

Giả sử rằng chỉ có cuối cùng phần tử trong các chuỗi phụ khác nhau:

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

Tôi là u hát VB ngay bây giờ, nhưng bản dịch sang C# phải đơn giản. Từ đây thực hiện vấn đề thực tế của bạn nên đơn giản - bạn có một bộ sưu tập, mục cuối cùng là số cuối cùng, chỉ cần tăng nó và thay thế mục cuối cùng của bộ sưu tập và viết nó ra lần nữa.

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 
1

Giả sử định dạng sẽ không thay đổi, đây có thể là giải pháp tốt nhất của bạn. Điều này sẽ làm việc ngay cả với chuỗi danh sách phiên bản không theo thứ tự.

 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

Đây là một giải pháp tốt. Nếu bất kỳ chuỗi nào chứa dấu chấm phụ hoặc ký tự không phải số, điều này sẽ không thành công. Nhưng nếu tất cả các chuỗi có định dạng đúng, thì nó sẽ hoạt động rất tốt. – configurator

+0

Tôi sẽ không làm Versions.Reverse() mặc dù - đó là một sự lãng phí của cpu. Phiên bản đơn giản maxVersion = Phiên bản [Versions.Count - 1]; – configurator

+0

Đúng. Cả List (T) .Item và List (T) .Count() là O (1). List.Reverse() là O (n). –

3

Nếu ý định của bạn là luôn luôn nhận được xâu qua sau khi một nhân vật cụ thể (không bao gồm các nhân vật delimiter tất nhiên (trong trường hợp này một thời gian)), mà tôi tin là ý định của bạn:

Giữ nó đơn giản với một lớp lót 1:

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

Tôi sẽ để các bài đăng khác trả lời phần còn lại của truy vấn của bạn.

Các vấn đề liên quan