2012-02-24 15 views
8

Tôi có chuỗi sau:Làm thế nào để Chia String với Chứa ngoặc vào mảng đa chiều

"(X,Y,Z),(A,B,C),(R,S,T)" 

Tôi muốn chia này thành một mảng đa chiều:

arr[0] = [x,y,z] 
arr[1] = [a,b,c] 
arr[2] = [r,s,t] 

để:

arr[0][1] = y, arr[0][2] = z, etc. 

Tôi có thể làm điều đó bằng cách tước dấu ngoặc đơn đầu tiên và cuối cùng, chia nhỏ trên "), (" và sau đó lặp lại y và làm một phần khác. Nhưng tôi cảm thấy bẩn thỉu, không chắc chắn, giống như một vũ nữ thoát y (chơi chữ có chủ đích) trong một quán bar phía sau ... có cách nào sạch hơn không?

Có thể một số LINQ cần giải cứu?

Tôi đang sử dụng C#.

+0

Bạn có biết chắc chắn đó sẽ là mảng hai chiều và không có răng cưa không? –

+0

Đúng, luôn là hai chiều, luôn có cùng một số phần tử trong tham số thứ hai (3) – OpenR

+0

Bạn có muốn mảng có răng cưa (làm mã của bạn) hay mảng 2D không? –

Trả lời

5
string data = "(X,Y,Z),(A,B,C),(R,S,T)"; 

string[][] stringses = data.Trim('(', ')') 
    .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries) 
    .Select(chunk => chunk.Split(',')) 
    .ToArray(); 
+0

cảm ơn câu trả lời! – OpenR

3

Bạn sẽ có thể làm cho một jagged array (như mã của bạn hiển thị) từ này với tách chuỗi và LINQ khá dễ dàng:

string original = "(X,Y,Z),(A,B,C),(R,S,T)"; 

string[] groups = original.Trim('(',')') 
        .Split(new[] {"),("}, StringSplitOptions.RemoveEmptyEntries); 
string[][] results = groups.Select(g => g.Split(',')).ToArray(); 
+0

cảm ơn, cho câu trả lời! 1 cho câu trả lời đầu tiên. – OpenR

0

Bạn có thể nhận được dữ liệu của bạn với biểu thức thông thường

Một biểu thức reqular là: (\(([A-Z]+)\,?\))+ điều này sẽ cung cấp cho bạn x, y, z trong nhóm .. và sau đó chỉ cần thêm chúng trong mảng chiều thứ hai của bạn :)

3

Regex là bạn bạn bè. đây là một đoạn mã đơn giản làm điều đó cho bạn.

var input = @"(X,Y,Z),(A,B,C),(R,S,T)"; 
var pattern = @"[A-Za-z,]+\b"; 

List<List<string>> twoDimentionList = new List<List<string>>(); 

foreach (Match m in Regex.Matches(input, pattern)) 
{ 
    List<string> values = m.Value.Split(',').ToList<string>(); 
    twoDimentionList.Add(values) 
} 

Hy vọng điều này sẽ hữu ích!

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