2013-09-24 47 views
5

Tôi đang tìm để tìm một cách để chia một chuỗi chữ và số nhưchuỗi chữ và số Split tới mảng chứa các bảng chữ cái và ký tự số riêng

"Foo123Bar" 

vào một mảng chứa nó như vậy

array[0] = "Foo" 
array[1] = "123" 
array[2] = "Bar" 

Tôi không chắc cách tốt nhất để đạt được điều này là gì, đặc biệt là vì các chuỗi tôi đang so sánh không theo mô hình cụ thể nào như trước tiên, bảng chữ cái hoặc số, hoặc số lần chúng xuất hiện. Ví dụ nó có thể trông giống như bất kỳ những điều sau đây:

"Foo123Bar" 
"123Bar" 
"Foobar123" 
"Foo123Bar2" 

Tôi đang cố gắng để tìm hiểu xem có một cách hiệu quả hơn để làm điều này không phải là tách chuỗi ký tự bằng cách nhân vật và kiểm tra để xem nếu nó là số .

+0

gì nên là kết quả của ' "Foobar123"', nó nên được 'Foo',' bar' và '123' hoặc 'Foobar' và' 123' – Habib

+0

Kết quả của '" Foobar123 "' phải là '" Foobar "' và '" 123 "'. – Nvx

Trả lời

11
string input = "Foo123Bar"; 
var array = Regex.Matches(input, @"\D+|\d+") 
       .Cast<Match>() 
       .Select(m => m.Value) 
       .ToArray(); 
+1

Điều đó giải quyết vấn đề một cách hoàn hảo, cảm ơn rất nhiều! – Nvx

0

Tôi không nghĩ rằng bạn sẽ kiểm tra mọi ký tự của chuỗi.
Bạn có thể thử một cái gì đó như thế này:

string[] SplitMyString(string s) 
{ 
    if(s.Length == 0) 
    return new string[0]; 

    List<string> split = new List<string>(1); 
    split.Add(""); 

    bool isNumeric = s[0] >= '0' && s[0] <= '9'; 
    foreach(char c in s) 
    { 
    bool AddString = false; 
    if(c >= '0' && c <= '9') 
    { 
     AddString = !isNumeric; 
     isNumeric = true; 
    } 
    else 
    { 
     AddString = isNumeric; 
     isNumeric = false; 
    } 
    if(AddString) 
     split.Add(c.ToString()); 
    else 
     split[split.Count-1] += c; 
    } 
    return split.ToArray(); 
} 
Các vấn đề liên quan